From 1de6f8f8ab953cd8e55107c56d7f6f00c2997de4 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Thu, 15 Jul 2021 13:28:53 -0700 Subject: [PATCH 1/2] Add ROM Updater to Boot Loader - Phil Summers' ROM Updater has been given an official/permanent place in the Boot Loader menu. - Rearranged the order and sizing of the modules in the third ROM bank to allow space for above. - Made a few minor updates to the DSKYng support code. --- Doc/ChangeLog.txt | 1 + Source/Apps/tstdskng.asm | 18 ++++++++---- Source/HBIOS/Build.ps1 | 7 ++--- Source/HBIOS/Build.sh | 13 ++++----- Source/HBIOS/Makefile | 3 +- Source/HBIOS/dskyng.asm | 29 ++++++++++++------- Source/HBIOS/imgpad.asm | 12 -------- Source/HBIOS/imgpad2.asm | 4 +-- Source/HBIOS/netboot.mod | Bin 8192 -> 4096 bytes Source/HBIOS/romldr.asm | 61 ++++++++++++++++++++++----------------- Source/HBIOS/std.asm | 48 +++++++++++++++++++++++------- Source/HBIOS/updater.asm | 11 +++---- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 14 files changed, 120 insertions(+), 91 deletions(-) delete mode 100644 Source/HBIOS/imgpad.asm diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index cbe797d5..80b6f996 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -42,6 +42,7 @@ Version 3.1.1 - PMS: Early DMA support - W?S: Updated FLASH software to v1.3.5 (supports 128KB A29010B, 512KB A29040B) - DDW: Support for DSKYng capabitlities +- WBW: Added Phil Summers' ROM Updater into ROM Loader Version 3.1 ----------- diff --git a/Source/Apps/tstdskng.asm b/Source/Apps/tstdskng.asm index dc1927bb..ef34f35d 100644 --- a/Source/Apps/tstdskng.asm +++ b/Source/Apps/tstdskng.asm @@ -16,9 +16,9 @@ FALSE: .EQU 0 TRUE: .EQU !FALSE ; -DSKY_OSC: .EQU 1000000 ; OSCILLATOR FREQ IN HZ +DSKY_OSC: .EQU 3000000 ; OSCILLATOR FREQ IN HZ ; -BDOS: .EQU FALSE ; BDOS OR DIRECT TO 8250ISH +BDOS: .EQU TRUE ; BDOS OR DIRECT TO 8250ISH ; UART_BASE: .EQU $68 ; UART BASE IO ADDRESS PPI_BASE: .EQU $60 ; PPI BASE IO PORT @@ -31,7 +31,12 @@ PPI_BASE: .EQU $60 ; PPI BASE IO PORT ; 10 04 ; +--08--+ 80 ; -; KEY CODE MAP (KEY CODES) --CCCRRR +; KEY CODE MAP (KEY CODES) CSCCCRRR +; |||||||| +; |||||+++-- ROW +; ||+++----- COL +; |+-------- SHIFT +; +--------- CONTROL ; ; 00 08 10 18 23 ; 01 09 11 19 22 @@ -85,7 +90,7 @@ DSKY_PRESCL: .EQU DSKY_OSC / 100000 ; PRESCALER LD SP,STACK ; CALL PRTSTRD - .DB "\r\nNextGenDSKY Test Program, v1.2, 2021-06-26$" + .DB "\r\nNextGenDSKY Test Program, v1.3, 2021-07-15$" CALL PRTSTRD .DB "\r\nPPI port 0x$" LD A,PPI_BASE @@ -179,7 +184,7 @@ M1: ; M2: CALL CST ; CONSOLE STATUS - JR NZ,M4 ; ABORT IF KEY PRESSED + JP NZ,M4 ; ABORT IF KEY PRESSED CALL DSKY_STAT AND $3F ; DUMP 2 HIGH BITS JR Z,M2 ; LOOP IF STATUS ZERO @@ -198,6 +203,7 @@ M2: M3: PUSH BC CALL DSKY_DIN + XOR %11000000 ; FLIP CONTROL & SHIFT MODIFIERS CALL PRTHEXBYTE CALL PC_SPACE ; SHIFT BUFFER @@ -223,7 +229,7 @@ M3: LD HL,DSPBUF CALL DSKY_PUTENCSTR POP AF - ; TOGGLE LED, KEY CODE: --CCCRRR + ; TOGGLE LED, KEY CODE: CSCCCRRR PUSH AF AND $07 ; ISOLATE ROW LD B,A ; SAVE IN B diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index faeaee73..42f36900 100644 --- a/Source/HBIOS/Build.ps1 +++ b/Source/HBIOS/Build.ps1 @@ -194,7 +194,7 @@ if ($Platform -ne "UNA") "Building ${RomName} output files..." # Build 32K OS chunk containing the loader, debug monitor, and two OS images -Concat 'romldr.bin', 'dbgmon.bin', "..\cpm22\cpm_${Bios}.bin", "..\zsdos\zsys_${Bios}.bin" osimg.bin +Concat 'romldr.bin', 'dbgmon.bin', "..\zsdos\zsys_${Bios}.bin", "..\cpm22\cpm_${Bios}.bin" osimg.bin # Build 20K OS chunk containing the loader, debug monitor, and one OS image Concat 'romldr.bin','dbgmon.bin', "..\zsdos\zsys_${Bios}.bin" osimg_small.bin @@ -202,8 +202,8 @@ Concat 'romldr.bin','dbgmon.bin', "..\zsdos\zsys_${Bios}.bin" osimg_small.bin # Build second and third 32K chunks containing supplemental ROM apps (not for UNA) if ($Platform -ne "UNA") { - Concat '..\Forth\camel80.bin', 'nascom.bin', 'tastybasic.bin', 'game.bin', 'eastaegg.bin', 'usrrom.bin' osimg1.bin - Concat 'netboot.mod', 'imgpad2.bin' osimg2.bin + Concat '..\Forth\camel80.bin', 'nascom.bin', 'tastybasic.bin', 'game.bin', 'eastaegg.bin', 'netboot.mod', 'updater.bin', 'usrrom.bin' osimg1.bin + Concat 'imgpad2.bin' osimg2.bin } # @@ -258,7 +258,6 @@ else Concat 'hbios_rom.bin','osimg.bin','osimg1.bin','osimg2.bin',$RomDiskFile $RomFile Concat 'hbios_rom.bin','osimg.bin','osimg1.bin','osimg2.bin' $UpdFile Concat 'hbios_app.bin','osimg_small.bin' $ComFile - # Concat 'hbios_img.bin','osimg_small.bin' $ImgFile } # Remove the temporary working ROM disk file diff --git a/Source/HBIOS/Build.sh b/Source/HBIOS/Build.sh index 21adc95f..65f6b205 100755 --- a/Source/HBIOS/Build.sh +++ b/Source/HBIOS/Build.sh @@ -99,21 +99,21 @@ done cp ../Forth/camel80.bin . -make dbgmon.bin romldr.bin eastaegg.bin imgpad2.bin +make dbgmon.bin romldr.bin imgpad2.bin if [ $platform != UNA ] ; then - make nascom.bin tastybasic.bin game.bin usrrom.bin imgpad2.bin + make nascom.bin tastybasic.bin game.bin eastaegg.bin updater.bin usrrom.bin imgpad2.bin make hbios_rom.bin hbios_app.bin hbios_img.bin fi echo "Building $romname output files..." -cat romldr.bin dbgmon.bin ../CPM22/cpm_$BIOS.bin ../ZSDOS/zsys_$BIOS.bin >osimg.bin +cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$BIOS.bin ../CPM22/cpm_$BIOS.bin >osimg.bin cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$BIOS.bin >osimg_small.bin if [ $platform != UNA ] ; then - cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin usrrom.bin >osimg1.bin - cat netboot.mod imgpad2.bin >osimg2.bin + cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin netboot.mod updater.bin usrrom.bin >osimg1.bin + cat imgpad2.bin >osimg2.bin fi echo "Building ${romsize}KB $romname ROM disk data file..." @@ -165,7 +165,4 @@ else cat hbios_rom.bin osimg.bin osimg1.bin osimg2.bin $romdiskfile >$romname.rom cat hbios_rom.bin osimg.bin osimg1.bin osimg2.bin >$romname.upd cat hbios_app.bin osimg_small.bin > $romname.com - # cat hbios_img.bin osimg_small.bin > $romname.img fi - -#rm $romdiskfile diff --git a/Source/HBIOS/Makefile b/Source/HBIOS/Makefile index df3845ff..a6edb1b0 100644 --- a/Source/HBIOS/Makefile +++ b/Source/HBIOS/Makefile @@ -37,7 +37,7 @@ endif MOREDIFF = camel80.bin game.bin hbios_rom.bin nascom.bin prefix.bin usrrom.bin \ dbgmon.bin hbios_app.bin imgpad2.bin osimg1.bin osimg2.bin romldr.bin \ eastaegg.bin hbios_img.bin osimg.bin tastybasic.bin \ - game.bin usrrom.bin + game.bin updater.bin usrrom.bin SUBDIRS = DEST = ../../Binary @@ -81,6 +81,7 @@ romldr.bin: build.inc dbgmon.bin: build.inc nascom.bin: build.inc eastaegg.bin: build.inc +updater.bin: build.inc dumps: for i in $(MOREDIFF) ; do \ diff --git a/Source/HBIOS/dskyng.asm b/Source/HBIOS/dskyng.asm index e351e925..5f244105 100644 --- a/Source/HBIOS/dskyng.asm +++ b/Source/HBIOS/dskyng.asm @@ -13,7 +13,12 @@ ; 10 04 ; +--08--+ 80 ; -; KEY CODE MAP (KEY CODES) --CCCRRR +; KEY CODE MAP (KEY CODES) CSCCCRRR +; |||||||| +; |||||+++-- ROW +; ||+++----- COL +; |+-------- SHIFT +; +--------- CONTROL ; ; 00 08 10 18 23 ; 01 09 11 19 22 @@ -147,7 +152,9 @@ DSKY_GETKEY: LD A,DSKY_CMD_FIFO CALL DSKY_CMD CALL DSKY_DIN - AND $3F ; STRIP OFF SHIFT AND CONTROL KEYS (FOR NOW) + XOR %11000000 ; FLIP POLARITY OF SHIFT/CTL BITS + PUSH AF ; SAVE VALUE + AND $3F ; STRIP SHIFT/CTL BITS FOR LOOKUP LD B,28 ; SIZE OF DECODE TABLE LD C,0 ; INDEX LD HL,DSKY_KEYMAP ; POINT TO BEGINNING OF TABLE @@ -157,11 +164,15 @@ DSKY_GETKEY1: INC HL INC C ; BUMP INDEX DJNZ DSKY_GETKEY1 ; LOOP UNTIL EOT + POP AF ; FIX STACK LD A,$FF ; NOT FOUND ERR, RETURN $FF RET DSKY_GETKEY2: ; RETURN THE INDEX POSITION WHERE THE SCAN CODE WAS FOUND - LD A,C ; RETURN INDEX VALUE + ; THE ORIGINAL SHIFT/CTRL BITS ARE RESTORED + POP AF ; RESTORE RAW VALUE + AND %11000000 ; ISOLATE SHIFT/CTRL BITS + OR C ; COMBINE WITH INDEX VALUE RET ; ;_KEYMAP_TABLE_____________________________________________________________________________________________________________ @@ -558,7 +569,7 @@ DSKY_L2ON: LD C,$0E CALL DSKY_GETBYTE - and $DF + or $20 LD C,$0E CALL DSKY_PUTBYTE @@ -592,7 +603,7 @@ DSKY_L2OFF: LD C,$0E CALL DSKY_GETBYTE - or $20 + and $DF LD C,$0E CALL DSKY_PUTBYTE @@ -665,14 +676,10 @@ DSKY_PPIRD1: ; DSKY_PPIIDLE: JR DSKY_PPIRD ; SAME AS READ MODE -; -; -; - ; ; CODES FOR NUMERICS -; HIGH BIT ALWAYS SET TO SUPPRESS DECIMAL POINT -; CLEAR HIGH BIT TO SHOW DECIMAL POINT +; HIGH BIT ALWAYS CLEAR TO SUPPRESS DECIMAL POINT +; SET HIGH BIT TO SHOW DECIMAL POINT ; HEXMAP: DSKY_NUMS: diff --git a/Source/HBIOS/imgpad.asm b/Source/HBIOS/imgpad.asm deleted file mode 100644 index 8ca47e5d..00000000 --- a/Source/HBIOS/imgpad.asm +++ /dev/null @@ -1,12 +0,0 @@ -#INCLUDE "std.asm" -; -SLACK .EQU ($8000-LDR_SIZ-MON_SIZ-SYS_SIZ-SYS_SIZ-EGG_SIZ) - .FILL SLACK,00H -; -MON_STACK .EQU $ -; - .ECHO "Padspace space created: " - .ECHO SLACK - .ECHO " bytes.\n" - - .END diff --git a/Source/HBIOS/imgpad2.asm b/Source/HBIOS/imgpad2.asm index 6a2ad74c..43099f3d 100644 --- a/Source/HBIOS/imgpad2.asm +++ b/Source/HBIOS/imgpad2.asm @@ -1,9 +1,7 @@ #INCLUDE "std.asm" ; -SLACK .EQU ($8000-NET_SIZ) +SLACK .EQU $8000 .FILL SLACK,00H -; -MON_STACK .EQU $ ; .ECHO "Padspace space created: " .ECHO SLACK diff --git a/Source/HBIOS/netboot.mod b/Source/HBIOS/netboot.mod index 12ee0b55e438d08b0644c08bf552b2fd5585bda1..674d9e9b95585b250a7ca018868d8cff8b6bbe13 100644 GIT binary patch delta 6 NcmZp0Xi!)n000N}0ucZJ delta 16 WcmZorXmD5{usMKz0|$@@U Date: Thu, 15 Jul 2021 19:14:16 -0700 Subject: [PATCH 2/2] More DSKY Cleanup --- Source/HBIOS/PPI_Bus.txt | 39 ++++++++++ Source/HBIOS/dbgmon.asm | 6 +- Source/HBIOS/dsky.asm | 105 +++++++++++++------------ Source/HBIOS/dskyng.asm | 162 ++++++++++++++++----------------------- Source/HBIOS/hbios.asm | 46 +++++++---- Source/HBIOS/romldr.asm | 12 +-- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 8 files changed, 204 insertions(+), 170 deletions(-) create mode 100644 Source/HBIOS/PPI_Bus.txt diff --git a/Source/HBIOS/PPI_Bus.txt b/Source/HBIOS/PPI_Bus.txt new file mode 100644 index 00000000..7b5fa7d9 --- /dev/null +++ b/Source/HBIOS/PPI_Bus.txt @@ -0,0 +1,39 @@ + +PPI Signal PPIDE PPISD DSKY DSKYNG (PROTO) DSKYNG (FINAL) +---------- ----- ----- ----- ----- ----- +PA0 <>D0 >ID0 <>D0 <>D0 +PA1 <>D1 >ID1 <>D1 <>D1 +PA2 <>D2 >ID2 <>D2 <>D2 +PA3 <>D3 >ID3 <>D3 <>D3 +PA4 <>D4 >ID4 /SHUTDOWN <>D4 <>D4 +PA5 <>D5 >ID5 /DECODE <>D5 <>D5 +PA6 <>D6 >ID6 HEXA/CODEB <>D6 <>D6 +PA7 <>D7 >ID7 DAT_COMING <>D7 <>D7 + +PB0 <>D8 +D9 +D10 +D11 +D12 +D13 +D14 + +PB7 <>D15 DA0 >MOSI >COL0 >A0 >A0 +PC1 >DA1 >CLK >COL1 >/WR +PC2 >DA2 >COL2 >/RD +PC3 >CS0* >COL3 >CS&* >CS&* +PC4 >CS1* >/CS >CS&* >CS&* +PC5 >DIOW* >/WR +PC6 >DIOR* >/WR >/RD +PC7 >RESET* >MODE >RESET >RESET + +* Inverted by adapter ++ Pullup +& Both signals must be asserted + +Compatibility: + +- PPISD & DSKY +- PPIDE & DSKYNG +- PPISD & DSKYNG diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index 90bf9193..9bae4ef8 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -994,7 +994,7 @@ DSKY_ENTRY: ; FRONTPANELLOOP: LD HL,CPUUP ; SET POINTER TO CPU UP MSG - CALL DSKY_SHOWSEG ; DISPLAY UNENCODED + CALL DSKY_SHOW ; DISPLAY UNENCODED #IF (DSKYMODE == DSKYMODE_NG) CALL DSKY_HIGHLIGHTCMDKEYS @@ -1030,7 +1030,7 @@ FRONTPANELLOOP1: ; DOBOOT: LD HL,MSGBOOT ; SET POINTER TO BOOT MESSAGE - CALL DSKY_SHOWSEG ; DISPLAY UNENCODED + CALL DSKY_SHOW ; DISPLAY UNENCODED JP BOOT ; DO BOOT ; ;__DOPORTREAD_________________________________________________________________ @@ -1425,7 +1425,7 @@ ENCBUF1: POP HL ; RESTORE POINTER DJNZ ENCBUF1 ; LOOP THRU ALL BUF POSITIONS LD HL,DSKY_BUF ; POINT TO DECODED BUFFER - CALL DSKY_SHOWSEG ; DISPLAY IT + CALL DSKY_SHOW ; DISPLAY IT POP DE ; RESTORE DE POP BC ; RESTORE BC POP AF ; RESTORE AF diff --git a/Source/HBIOS/dsky.asm b/Source/HBIOS/dsky.asm index 464836cd..fb7326d4 100644 --- a/Source/HBIOS/dsky.asm +++ b/Source/HBIOS/dsky.asm @@ -4,31 +4,7 @@ ;================================================================================================== ; ; THE DSKY MAY COSESIDE ON THE SAME PPI BUS AS A PPISD. IT MAY NOT -; SHARE A PPI BUS WITH A PPIDE. -; -PPIA .EQU DSKYPPIBASE + 0 ; PORT A -PPIB .EQU DSKYPPIBASE + 1 ; PORT B -PPIC .EQU DSKYPPIBASE + 2 ; PORT C -PPIX .EQU DSKYPPIBASE + 3 ; PPI CONTROL PORT -; -; ICM7218A KEYPAD PPISD -; -------- -------- -------- -; PA0-7 IO0-7 -; PB0-5 COLS 0-5 -; PB6 -; PB7 DO (SD) -; PC1 ROW 1 CLK (>SD) -; PC2-3 ROWS 2-3 -; PC4 /CS (PRI) -; PC5 /CS (SEC) -; PC6 /WR -; PC7 MODE -; -; DSKY SCAN CODES ARE ONE BYTE: CCRRRRRR -; BITS 7-6 IDENTFY THE COLUMN OF THE KEY PRESSED -; BITS 5-0 ARE A BITMAP, WITH A BIT ON TO INDICATE ROW OF KEY PRESSED -; +; SHARE A PPI BUS WITH A PPIDE. SEE PPI_BUS.TXT FOR MORE INFORMATION. ; ; LED SEGMENTS (BIT VALUES) ; @@ -38,6 +14,10 @@ PPIX .EQU DSKYPPIBASE + 3 ; PPI CONTROL PORT ; 08 10 ; +--01--+ 80 ; +; DSKY SCAN CODES ARE ONE BYTE: CCRRRRRR +; BITS 7-6 IDENTFY THE COLUMN OF THE KEY PRESSED +; BITS 5-0 ARE A BITMAP, WITH A BIT ON TO INDICATE ROW OF KEY PRESSED +; ; ____PC0________PC1________PC2________PC3____ ; PB5 | $20 [D] $60 [E] $A0 [F] $E0 [BO] ; PB4 | $10 [A] $50 [B] $90 [C] $D0 [GO] @@ -46,6 +26,12 @@ PPIX .EQU DSKYPPIBASE + 3 ; PPI CONTROL PORT ; PB1 | $02 [1] $42 [2] $82 [3] $C2 [EN] ; PB0 | $01 [FW] $41 [0] $81 [BK] $C1 [CL] ; +; +PPIA .EQU DSKYPPIBASE + 0 ; PORT A +PPIB .EQU DSKYPPIBASE + 1 ; PORT B +PPIC .EQU DSKYPPIBASE + 2 ; PORT C +PPIX .EQU DSKYPPIBASE + 3 ; PPI CONTROL PORT +; ;__DSKY_INIT_________________________________________________________________________________________ ; ; CONFIGURE PARALLEL PORT AND CLEAR KEYPAD BUFFER @@ -240,51 +226,57 @@ DSKY_KEYBUF .DB 0 #ENDIF ; DSKY_KBD ; ;================================================================================================== -; DSKY HEX DISPLAY +; CONVERT 32 BIT BINARY TO 8 BYTE HEX SEGMENT DISPLAY ;================================================================================================== ; -DSKY_HEXOUT: - LD B,DSKY_HEXBUFLEN - LD HL,DSKY_BUF - LD DE,DSKY_HEXBUF -DSKY_HEXOUT1: +; HL: ADR OF 32 BIT BINARY +; DE: ADR OF DEST LED SEGMENT DISPLAY BUFFER (8 BYTES) +; +DSKY_BIN2SEG: + PUSH HL + PUSH DE + LD B,4 ; 4 BYTES OF INPUT + EX DE,HL +DSKY_BIN2SEG1: LD A,(DE) ; FIRST NIBBLE SRL A SRL A SRL A SRL A + PUSH HL + LD HL,DSKY_HEXMAP + CALL DSKY_ADDHLA + LD A,(HL) + POP HL LD (HL),A INC HL LD A,(DE) ; SECOND NIBBLE AND 0FH + PUSH HL + LD HL,DSKY_HEXMAP + CALL DSKY_ADDHLA + LD A,(HL) + POP HL LD (HL),A INC HL INC DE ; NEXT BYTE - DJNZ DSKY_HEXOUT1 - LD HL,DSKY_BUF - JR DSKY_SHOWHEX + DJNZ DSKY_BIN2SEG1 + POP DE + POP HL + RET ; ;================================================================================================== ; DSKY SHOW BUFFER ; HL: ADDRESS OF BUFFER -; ENTER @ SHOWHEX FOR HEX DECODING -; ENTER @ SHOWSEG FOR SEGMENT DECODING ;================================================================================================== ; -DSKY_SHOWHEX: - LD A,$D0 ; 7218 -> (DATA COMING, HEXA DECODE) - JR DSKY_SHOW -; -DSKY_SHOWSEG: - LD A,$F0 ; 7218 -> (DATA COMING, NO DECODE) - JR DSKY_SHOW -; DSKY_SHOW: - PUSH AF ; SAVE 7218 CONTROL BITS + ;;PUSH AF ; SAVE 7218 CONTROL BITS LD A,82H ; SETUP PPI OUT (PPIX),A CALL DSKY_COFF - POP AF + ;;POP AF + LD A,$F0 ; 7218 -> (DATA COMING, NO DECODE) OUT (PPIA),A CALL DSKY_STROBEC ; STROBE COMMAND LD B,DSKY_BUFLEN ; NUMBER OF DIGITS @@ -313,11 +305,26 @@ DSKY_COFF: ; CALL DSKY_DELAY ; WAIT RET ; +;================================================================================================== +; UTILTITY FUNCTIONS +;================================================================================================== +; +DSKY_ADDHLA: + ADD A,L + LD L,A + RET NC + INC H + RET +; +;================================================================================================== +; STORAGE +;================================================================================================== +; ; CODES FOR NUMERICS -; HIGH BIT ALWAYS SET TO SUPPRESS DECIMAL POINT -; CLEAR HIGH BIT TO SHOW DECIMAL POINT +; HIGH BIT ALWAYS CLEAR TO SUPPRESS DECIMAL POINT +; SET HIGH BIT TO SHOW DECIMAL POINT ; -DSKY_NUMS: +DSKY_HEXMAP: .DB $7B ; 0 .DB $30 ; 1 .DB $6D ; 2 diff --git a/Source/HBIOS/dskyng.asm b/Source/HBIOS/dskyng.asm index 5f244105..2e4ba36d 100644 --- a/Source/HBIOS/dskyng.asm +++ b/Source/HBIOS/dskyng.asm @@ -4,6 +4,7 @@ ;================================================================================================== ; ; A DSKYNG CAN SHARE A PPI BUS WITH EITHER A PPIDE OR PPISD. +; SEE PPI_BUS.TXT FOR MORE INFORMATION. ; ; LED SEGMENTS (BIT VALUES) ; @@ -198,21 +199,25 @@ DSKY_KEYMAP: #ENDIF ; DSKY_KBD ; ;================================================================================================== -; DSKY HEX DISPLAY +; CONVERT 32 BIT BINARY TO 8 BYTE HEX SEGMENT DISPLAY ;================================================================================================== ; -DSKY_HEXOUT: - LD B,DSKY_HEXBUFLEN - LD HL,DSKY_BUF - LD DE,DSKY_HEXBUF -DSKY_HEXOUT1: +; HL: ADR OF 32 BIT BINARY +; DE: ADR OF DEST LED SEGMENT DISPLAY BUFFER (8 BYTES) +; +DSKY_BIN2SEG: + PUSH HL + PUSH DE + LD B,4 ; 4 BYTES OF INPUT + EX DE,HL +DSKY_BIN2SEG1: LD A,(DE) ; FIRST NIBBLE SRL A SRL A SRL A SRL A PUSH HL - LD HL,HEXMAP + LD HL,DSKY_HEXMAP CALL DSKY_ADDHLA LD A,(HL) POP HL @@ -221,49 +226,40 @@ DSKY_HEXOUT1: LD A,(DE) ; SECOND NIBBLE AND 0FH PUSH HL - LD HL,HEXMAP + LD HL,DSKY_HEXMAP CALL DSKY_ADDHLA LD A,(HL) POP HL LD (HL),A INC HL INC DE ; NEXT BYTE - DJNZ DSKY_HEXOUT1 - LD HL,DSKY_BUF - JR DSKY_SHOW + DJNZ DSKY_BIN2SEG1 + POP DE + POP HL + RET ; ;================================================================================================== ; DSKY SHOW BUFFER ; HL: ADDRESS OF BUFFER -; ENTER @ SHOWHEX FOR HEX DECODING -; ENTER @ SHOWSEG FOR SEGMENT DECODING ;================================================================================================== ; -DSKY_SHOWHEX: - JR DSKY_SHOW -; -DSKY_SHOWSEG: - JR DSKY_SHOW -; DSKY_SHOW: -; PUSH HL -; CALL DSKY_RESET -; POP HL LD C,0 ; STARTING DISPLAY POSITION LD B,DSKY_BUFLEN ; NUMBER OF CHARS JP DSKY_PUTSTR ; +;================================================================================================== +; DSKYNG OUTPUT ROUTINES +;================================================================================================== ; -; -; -; COMMAND IN A +; SEND DSKY COMMAND BYTE IN REGISTER A ; TRASHES BC ; DSKY_CMD: LD B,$01 JR DSKY_DOUT2 ; -; DATA VALUE IN A +; SEND DSKY DATA BYTE IN REGISTER A ; TRASHES BC ; DSKY_DOUT: @@ -317,21 +313,25 @@ DSKY_DOUT2: CALL DSKY_PPIIDLE RET ; -; STATUS VALUE IN A +;================================================================================================== +; DSKYNG OUTPUT ROUTINES +;================================================================================================== +; +; RETURN DSKY STATUS VALUE IN A ; TRASHES BC ; DSKY_ST: LD B,$01 JR DSKY_DIN2 ; -; DATA VALUE RETURNED IN A +; RETURN NEXT DATA VALUE IN A ; TRASHES BC ; DSKY_DIN: LD B,$00 ; DSKY_DIN2: - ; SET PPI LINE CONFIG TO WRITE MODE + ; SET PPI LINE CONFIG TO READ MODE CALL DSKY_PPIRD ; ; SETUP @@ -374,7 +374,11 @@ DSKY_DIN2: CALL DSKY_PPIIDLE RET ; -; BLANK THE DISPLAY (WITHOUT USING CLEAR) +;================================================================================================== +; DSKYNG UTILITY ROUTINES +;================================================================================================== +; +; BLANK DSKYNG DISPLAY (WITHOUT USING CLEAR) ; DSKY_BLANK: LD A,DSKY_CMD_WDSP @@ -456,39 +460,13 @@ DSKY_GETSTR1: DJNZ DSKY_GETSTR1 RET ; -; HL IS ADR OF ENCODED STRING OF BYTES -; B IS LEN OF STRING (BYTES) -; C IS POSITION IN DISPLAY RAM TO WRITE -; -DSKY_PUTENCSTR: - PUSH BC - LD A,C - ADD A,DSKY_CMD_WDSP - CALL DSKY_CMD - POP BC - EX DE,HL -DSKY_PUTENCSTR1: - LD A,(DE) - INC DE - LD HL,HEXMAP - CALL DSKY_ADDHLA - LD A,(HL) - XOR $FF - PUSH BC - CALL DSKY_DOUT - POP BC - DJNZ DSKY_PUTENCSTR1 - RET - -; -; This function is intended to update the LEDs. It expects 8 bytes following the call, and -; updates the entire matrix. +; This function is intended to update the LEDs. It expects 8 bytes +; following the call, and updates the entire matrix. ; ; EXAMPLE: ; CALL DSKY_PUTLED ; .DB $00,$00,$00,$00,$00,$00,$00,$00 ; -; DSKY_PUTLED: EX (SP),HL PUSH AF @@ -508,41 +486,38 @@ DSKY_PUTLED_1: POP AF EX (SP),HL RET - ; ; This function is intended to beep the speaker on the DSKY ; -; DSKY_BEEP: PUSH AF PUSH BC LD C,$0F CALL DSKY_GETBYTE - or $20 + OR $20 LD C,$0F CALL DSKY_PUTBYTE ;;; timer . . . PUSH HL - ld hl,$8FFF + LD hl,$8FFF DSKY_BEEP1: - dec hl - ld a,H - cp 0 - jp nz,DSKY_BEEP1 - pop hl + DEC HL + LD A,H + CP 0 + JP NZ,DSKY_BEEP1 + POP HL LD C,$0F CALL DSKY_GETBYTE - and $DF + AND $DF LD C,$0F CALL DSKY_PUTBYTE POP BC POP AF RET - ; ; This function is intended to turn on DSKY L1 ; @@ -552,14 +527,13 @@ DSKY_L1ON: LD C,$0D CALL DSKY_GETBYTE - or $20 + OR $20 LD C,$0D CALL DSKY_PUTBYTE POP BC POP AF RET - ; ; This function is intended to turn on DSKY L2 ; @@ -569,14 +543,13 @@ DSKY_L2ON: LD C,$0E CALL DSKY_GETBYTE - or $20 + OR $20 LD C,$0E CALL DSKY_PUTBYTE POP BC POP AF RET - ; ; This function is intended to turn off DSKY L1 ; @@ -586,14 +559,13 @@ DSKY_L1OFF: LD C,$0D CALL DSKY_GETBYTE - and $DF + AND $DF LD C,$0D CALL DSKY_PUTBYTE POP BC POP AF RET - ; ; This function is intended to turn off DSKY L2 ; @@ -603,16 +575,17 @@ DSKY_L2OFF: LD C,$0E CALL DSKY_GETBYTE - and $DF + AND $DF LD C,$0E CALL DSKY_PUTBYTE POP BC POP AF RET - - - +; +;================================================================================================== +; DSKYNG LINE CONTROL ROUTINES +;================================================================================================== ; ; SETUP PPI FOR WRITING: PUT PPI PORT A IN OUTPUT MODE ; AVOID REWRTING PPIX IF ALREADY IN OUTPUT MODE @@ -639,15 +612,6 @@ DSKY_PPIWR1: POP AF RET ; -; -; -DSKY_ADDHLA: - ADD A,L - LD L,A - RET NC - INC H - RET -; ; SETUP PPI FOR READING: PUT PPI PORT A IN INPUT MODE ; AVOID REWRTING PPIX IF ALREADY IN INPUT MODE ; @@ -664,10 +628,6 @@ DSKY_PPIRD: OUT (PPIX),A LD (DSKY_PPIX_VAL),A ; -; ; DIAGNOSTIC -; LD A,'R' -; CALL COUT -; DSKY_PPIRD1: POP AF RET @@ -677,12 +637,26 @@ DSKY_PPIRD1: DSKY_PPIIDLE: JR DSKY_PPIRD ; SAME AS READ MODE ; +;================================================================================================== +; UTILTITY FUNCTIONS +;================================================================================================== +; +DSKY_ADDHLA: + ADD A,L + LD L,A + RET NC + INC H + RET +; +;================================================================================================== +; STORAGE +;================================================================================================== +; ; CODES FOR NUMERICS ; HIGH BIT ALWAYS CLEAR TO SUPPRESS DECIMAL POINT ; SET HIGH BIT TO SHOW DECIMAL POINT ; -HEXMAP: -DSKY_NUMS: +DSKY_HEXMAP: .DB $3F ; 0 .DB $06 ; 1 .DB $5B ; 2 diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index bed652b6..01f951a6 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1431,20 +1431,18 @@ SAVE_REC_M: CALL DSKY_INIT LD HL,MSG_HBVER + 5 - LD A,(DSKY_NUMS + RMJ) - ;AND $7F + LD A,(DSKY_HEXMAP + RMJ) OR $80 LD (HL),A INC HL - LD A,(DSKY_NUMS + RMN) - ;AND $7F + LD A,(DSKY_HEXMAP + RMN) OR $80 LD (HL),A INC HL - LD A,(DSKY_NUMS + RUP) + LD A,(DSKY_HEXMAP + RUP) LD (HL),A LD HL,MSG_HBVER - CALL DSKY_SHOWSEG + CALL DSKY_SHOW #ENDIF ; #IF (WBWDEBUG == USEMIO) ; BUFFER OUTPUT UNTIL @@ -2862,7 +2860,11 @@ HB_DSKFUNC .DB 0 ; CURRENT DISK FUNCTION ; ; THE CURRENT DISK UNIT NUMBER WILL BE DISPLAYED IN THE FIRST ; 2 SEG DISPLAYS. THE LOWER 24 BITS OF THE SECTOR WILL BE -; DISPLAYED IN THE LAST 6 SEG DISPLAYS +; DISPLAYED IN THE LAST 6 SEG DISPLAYS. +; +; A DOT IS DISPLAYED TO SEPARATE THE UNIT NUMBER FROM THE ADDRESS +; DISPLAY. ALSO, A TRAILING DOT IS DISPLAYED IF THE I/O FUNCTION +; IS A WRITE. ; ; HL: ADDRESS OF 32-BIT SECTOR NUMBER (LITTLE-ENDIAN) ; ALL REGISTERS PERSERVED @@ -2882,7 +2884,22 @@ HB_DSKACT1: DJNZ HB_DSKACT1 ; LOOP LD A,(HB_DSKUNIT) ; GET DISK UNIT NUM LD (DE),A ; PUT AT HEAD OF BUF - CALL DSKY_HEXOUT ; DISPLAY ON DSKY +HB_DSKACT2: + LD HL,DSKY_HEXBUF ; BINARY BUF + LD DE,DSKY_BUF ; DISPLAY BUF + CALL DSKY_BIN2SEG ; CONVERT TO SEG DISPLAY BUF + LD A,(DSKY_BUF+1) ; SECOND SEGMENT + OR %10000000 ; TURN ON DOT + LD (DSKY_BUF+1),A ; SAVE IT + LD A,(HB_DSKFUNC) ; GET CURRENT I/O FUNCTION + CP BF_DIOWRITE ; IS IT A WRITE? + JR NZ,HB_DSKACT3 ; IF NOT, NO DOT, SKIP AHEAD + LD A,(DSKY_BUF+7) ; LAST SEGMENT + OR %10000000 ; TURN ON DOT + LD (DSKY_BUF+7),A ; SAVE IT +HB_DSKACT3: + EX DE,HL ; SEG DISPLAY BUF TO HL + CALL DSKY_SHOW ; DISPLAY ON DSKY POP HL POP DE POP BC @@ -2892,6 +2909,10 @@ HB_DSKACT1: ; THIS IS THE CHS VARIANT OF THE ABOVE. THIS IS USED BY CHS ORIENTED ; DISK DRIVERS (BASICALLY JUST FLOPPY). ; +; THE CURRENT DISK UNIT NUMBER WILL BE DISPLAYED IN THE FIRST +; 2 SEG DISPLAYS. THE TRACK, HEAD, AND SECTOR WILL BE DISPLAYED IN +; THE LAST 6 SEG DISPLAYS +; ; HL: ADDRESS OF CYL,HD,SEC IN THE FORMAT CCSH ; ALL REGISTERS PRESERVED ; @@ -2916,14 +2937,7 @@ HB_DSKACTCHS: DEC HL ; BACK TO SECTOR LD A,(HL) ; GET SECTOR LD (DE),A ; ADD TO BUF - CALL DSKY_HEXOUT ; DISPLAY ON DSKY - POP HL - POP DE - POP BC - POP AF - RET -; -HB_HEXBUF .FILL 4,0 ; 4 BYTE HEX DISPLAY BUFFER + JR HB_DSKACT2 ; #ENDIF ; diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index faf0b977..5d267ad7 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -208,7 +208,7 @@ prompt: #if (DSKYENABLE) call DSKY_RESET ; clear DSKY ld hl,msg_sel ; boot select msg - call DSKY_SHOWSEG ; show on DSKY + call DSKY_SHOW ; show on DSKY #IF (DSKYMODE == DSKYMODE_NG) call DSKY_PUTLED @@ -606,7 +606,7 @@ reboot: ; #if (DSKYENABLE) ld hl,msg_boot ; point to boot message - call DSKY_SHOWSEG ; display message + call DSKY_SHOW ; display message #endif ; ; cold boot system @@ -638,7 +638,7 @@ romload: ; #if (DSKYENABLE) ld hl,msg_load ; point to load message - call DSKY_SHOWSEG ; display message + call DSKY_SHOW ; display message #endif ; #if (BIOS == BIOS_WBW) @@ -722,7 +722,7 @@ romload1: ; #if (DSKYENABLE) ld hl,msg_go ; point to go message - call DSKY_SHOWSEG ; display message + call DSKY_SHOW ; display message #endif ; ld l,(ix+ra_ent) ; HL := app entry address @@ -747,7 +747,7 @@ diskboot: ; #if (DSKYENABLE) ld hl,msg_load ; point to load message - call DSKY_SHOWSEG ; display message + call DSKY_SHOW ; display message #endif ; #if (BIOS == BIOS_WBW) @@ -1031,7 +1031,7 @@ diskboot10: ; #if (DSKYENABLE) ld hl,msg_go ; point to go message - call DSKY_SHOWSEG ; display message + call DSKY_SHOW ; display message #endif ; ; Jump to entry vector diff --git a/Source/ver.inc b/Source/ver.inc index 86bc1b6d..3778e664 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.89" +#DEFINE BIOSVER "3.1.1-pre.90" diff --git a/Source/ver.lib b/Source/ver.lib index 8b561ddb..fe25abeb 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.89" + db "3.1.1-pre.90" endm