From dd73ec092b109ff3175d6cc063ffa1486681a65c Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Thu, 8 Nov 2018 18:21:26 -0800 Subject: [PATCH] Finish DBGMON and Cleanup --- Source/HBIOS/cfg_mk4.asm | 1 + Source/HBIOS/cfg_n8.asm | 1 + Source/HBIOS/cfg_rc.asm | 1 + Source/HBIOS/cfg_rc180.asm | 1 + Source/HBIOS/cfg_zeta.asm | 1 + Source/HBIOS/dbgmon.asm | 357 ++++++++++++------------------------- Source/HBIOS/dsky.asm | 23 ++- Source/HBIOS/romldr.asm | 312 ++++++++++++++------------------ 8 files changed, 274 insertions(+), 423 deletions(-) diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index c3c8df82..bda99450 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -19,6 +19,7 @@ HTIMENABLE .EQU FALSE ; TRUE FOR SIMH TIMER SUPPORT SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC +DSRTCCHG .EQU FALSE ; DS-1302 CONFIGURE CHARGE ON (TRUE) OR OFF (FALSE) ; ASCIENABLE .EQU TRUE ; TRUE FOR Z180 ASCI SUPPORT UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index ffc13bd6..9542eb4a 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -19,6 +19,7 @@ HTIMENABLE .EQU FALSE ; TRUE FOR SIMH TIMER SUPPORT SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC +DSRTCCHG .EQU FALSE ; DS-1302 CONFIGURE CHARGE ON (TRUE) OR OFF (FALSE) ; ASCIENABLE .EQU TRUE ; TRUE FOR Z180 ASCI SUPPORT UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) diff --git a/Source/HBIOS/cfg_rc.asm b/Source/HBIOS/cfg_rc.asm index 641f2089..1945fd24 100644 --- a/Source/HBIOS/cfg_rc.asm +++ b/Source/HBIOS/cfg_rc.asm @@ -19,6 +19,7 @@ HTIMENABLE .EQU FALSE ; TRUE FOR SIMH TIMER SUPPORT SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER DSRTCENABLE .EQU FALSE ; DS-1302 CLOCK DRIVER DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC +DSRTCCHG .EQU FALSE ; DS-1302 CONFIGURE CHARGE ON (TRUE) OR OFF (FALSE) ; ASCIENABLE .EQU FALSE ; TRUE FOR Z180 ASCI SUPPORT UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) diff --git a/Source/HBIOS/cfg_rc180.asm b/Source/HBIOS/cfg_rc180.asm index 5c8b1137..0d531dc8 100644 --- a/Source/HBIOS/cfg_rc180.asm +++ b/Source/HBIOS/cfg_rc180.asm @@ -19,6 +19,7 @@ HTIMENABLE .EQU FALSE ; TRUE FOR SIMH TIMER SUPPORT SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER DSRTCENABLE .EQU FALSE ; DS-1302 CLOCK DRIVER DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC +DSRTCCHG .EQU FALSE ; DS-1302 CONFIGURE CHARGE ON (TRUE) OR OFF (FALSE) ; ASCIENABLE .EQU TRUE ; TRUE FOR Z180 ASCI SUPPORT UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index cf4e16af..0933a06c 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -19,6 +19,7 @@ HTIMENABLE .EQU FALSE ; TRUE FOR SIMH TIMER SUPPORT SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC +DSRTCCHG .EQU FALSE ; DS-1302 CONFIGURE CHARGE ON (TRUE) OR OFF (FALSE) ; ASCIENABLE .EQU FALSE ; TRUE FOR Z180 ASCI SUPPORT UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index d38345bf..08ce5dda 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -1072,29 +1072,29 @@ PORTREADLOOP: SRL A ; SRL A ; SRL A ; - LD (DISPLAYBUF+5),A ; SHOW HIGH NIB IN DISP 5 + LD (DISPLAYBUF+2),A ; SHOW HIGH NIB IN DISP 5 LD A,C ; RESTORE PORT VALUE INTO "A" AND 0FH ; CLEAR HIGH NIB, LEAVING LOW - LD (DISPLAYBUF+4),A ; SHOW LOW NIB IN DISP 4 + LD (DISPLAYBUF+3),A ; SHOW LOW NIB IN DISP 4 IN A,(C) ; GET PORT VALUE FROM PORT IN "C" LD C,A ; STORE VALUE IN "C" SRL A ; ROTATE HIGH NIB TO LOW SRL A ; SRL A ; SRL A ; - LD (DISPLAYBUF+1),A ; SHOW HIGH NIB IN DISP 1 + LD (DISPLAYBUF+6),A ; SHOW HIGH NIB IN DISP 1 LD A,C ; RESTORE VALUE TO "A" AND 0FH ; CLEAR HIGH NIB, LEAVING LOW - LD (DISPLAYBUF),A ; DISPLAY LOW NIB IN DISP 0 + LD (DISPLAYBUF+7),A ; DISPLAY LOW NIB IN DISP 0 LD A,10H ; CLEAR OTHER DISPLAYS - LD (DISPLAYBUF+2),A ; - LD (DISPLAYBUF+3),A ; + LD (DISPLAYBUF+5),A ; + LD (DISPLAYBUF+4),A ; LD A,13H ; "P" - LD (DISPLAYBUF+7),A ; STORE IN DISP 7 + LD (DISPLAYBUF+0),A ; STORE IN DISP 7 LD A,14H ; "O" - LD (DISPLAYBUF+6),A ; STORE IN DISP 6 + LD (DISPLAYBUF+1),A ; STORE IN DISP 6 LD HL,DISPLAYBUF ; SET POINTER TO DISPLAY BUFFER - CALL HEXDISPLAY ; DISPLAY BUFFER CONTENTS + CALL ENCDISPLAY ; DISPLAY BUFFER CONTENTS PORTREADGETKEY: CALL KB_GET ; GET KEY FROM KB CP 12H ; [CL] PRESSED, EXIT @@ -1120,17 +1120,17 @@ PORTWRITELOOP: SRL A ; SRL A ; SRL A ; - LD (DISPLAYBUF+5),A ; DISPLAY HIGH NIB IN DISPLAY 5 + LD (DISPLAYBUF+2),A ; DISPLAY HIGH NIB IN DISPLAY 5 LD A,C ; RESTORE PORT VALUE INTO "A" AND 0FH ; CLEAR OUT HIGH NIB - LD (DISPLAYBUF+4),A ; DISPLAY LOW NIB IN DISPLAY 4 + LD (DISPLAYBUF+3),A ; DISPLAY LOW NIB IN DISPLAY 4 LD A,10H ; CLEAR OUT DISPLAYS 2 AND 3 - LD (DISPLAYBUF+2),A ; - LD (DISPLAYBUF+3),A ; + LD (DISPLAYBUF+5),A ; + LD (DISPLAYBUF+4),A ; LD A,13H ; DISPLAY "P" IN DISP 7 - LD (DISPLAYBUF+7),A ; + LD (DISPLAYBUF+0),A ; LD A,14H ; DISPLAY "O" IN DISP 6 - LD (DISPLAYBUF+6),A ; + LD (DISPLAYBUF+1),A ; LD HL,DISPLAYBUF ; POINT TO DISPLAY BUFFER CALL GETVALUE ; INPUT A BYTE VALUE, RETURN IN "A" OUT (C),A ; OUTPUT VALUE TO PORT STORED IN "C" @@ -1161,21 +1161,21 @@ DEPOSITLOOP: SRL A ; SRL A ; SRL A ; - LD (DISPLAYBUF+7),A ; + LD (DISPLAYBUF+0),A ; LD A,H ; AND 0FH ; - LD (DISPLAYBUF+6),A ; + LD (DISPLAYBUF+1),A ; LD A,L ; SRL A ; SRL A ; SRL A ; SRL A ; - LD (DISPLAYBUF+5),A ; + LD (DISPLAYBUF+2),A ; LD A,L ; AND 0FH ; - LD (DISPLAYBUF+4),A ; - LD A,10H ; LD (DISPLAYBUF+3),A ; + LD A,10H ; + LD (DISPLAYBUF+4),A ; LD HL,DISPLAYBUF ; CALL GETVALUE ; POP HL ; @@ -1212,32 +1212,32 @@ EXAMINELOOP: SRL A ; SRL A ; SRL A ; - LD (DISPLAYBUF+7),A ; + LD (DISPLAYBUF+0),A ; LD A,H ; RESTORE HIGH BYTE AND 0FH ; CLEAR HIGH NIBBLE - LD (DISPLAYBUF+6),A ; DISPLAY LOW NIBBLE IN DISP 6 + LD (DISPLAYBUF+1),A ; DISPLAY LOW NIBBLE IN DISP 6 LD A,L ; PUT LOW BYTE IN "A" SRL A ; SHOW HIGH NIBBLE IN DISP 5 SRL A ; SRL A ; SRL A ; - LD (DISPLAYBUF+5),A ; + LD (DISPLAYBUF+2),A ; LD A,L ; RESTORE LOW BYTE IN "A" AND 0FH ; CLEAR OUT HIGH NIBBLE - LD (DISPLAYBUF+4),A ; DISPLAY LOW NIBBLE IN DISP 4 + LD (DISPLAYBUF+3),A ; DISPLAY LOW NIBBLE IN DISP 4 LD A,10H ; CLEAR OUT DISP 3 - LD (DISPLAYBUF+3),A ; + LD (DISPLAYBUF+4),A ; LD A,(HL) ; GET VALUE FROM ADDRESS IN HL SRL A ; DISPLAY HIGH NIB IN DISPLAY 1 SRL A ; SRL A ; SRL A ; - LD (DISPLAYBUF+1),A ; + LD (DISPLAYBUF+6),A ; LD A,(HL) ; GET VALUE FROM ADDRESS IN HL AND 0FH ; CLEAR OUT HIGH NIBBLE - LD (DISPLAYBUF),A ; DISPLAY LOW NIBBLE IN DISPLAY 0 + LD (DISPLAYBUF+7),A ; DISPLAY LOW NIBBLE IN DISPLAY 0 LD HL,DISPLAYBUF ; POINT TO DISPLAY BUFFER - CALL HEXDISPLAY ; DISPLAY BUFFER ON DISPLAYS + CALL ENCDISPLAY ; DISPLAY BUFFER ON DISPLAYS POP HL ; RESTORE HL EXAMINEGETKEY: CALL KB_GET ; GET KEY FROM KB @@ -1264,10 +1264,14 @@ EXAMINEEXIT: ; GETADDR: PUSH BC ; STORE BC - JR GETADDRCLEAR ; +GETADDR0: + LD HL,ADDR ; INITIALIZE DISPLAYBUF + LD DE,DISPLAYBUF + LD BC,8 + LDIR GETADDR1: - LD HL,ADDR ; DISPLAY PROMPT - CALL SEGDISPLAY ; + LD HL,DISPLAYBUF ; DISPLAY PROMPT + CALL ENCDISPLAY ; GETADDRLOOP: CALL KB_GET ; CP 10H ; @@ -1275,107 +1279,48 @@ GETADDRLOOP: CP 13H ; EN PRESSED, DONE JR Z,GETADDRDONE ; CP 12H ; CLEAR PRESSED, CLEAR - JR Z,GETADDRCLEAR ; + JR Z,GETADDR0 ; JR GETADDRLOOP ; INVALID KEY, LOOP GETADDRDONE: LD HL,00H ; HL=0 - LD A,(DISPLAYBUF+1) ; GET DIGIT IN DISPLAY 1 + LD A,(DISPLAYBUF+6) ; GET DIGIT IN DISPLAY 1 SLA A ; ROTATE IT TO HIGH NIBBLE SLA A ; SLA A ; SLA A ; LD C,A ; STORE IT IN "C" - LD A,(DISPLAYBUF) ; GET DIGIT IN DISPLAY 0 + LD A,(DISPLAYBUF+7) ; GET DIGIT IN DISPLAY 0 AND 0FH ; CLEAR HIGH NIBBLE OR C ; ADD IN NIBBLE STORED IN C LD L,A ; STORE IT IN LOW BYTE OF ADDRESS POINTER - LD A,(DISPLAYBUF+3) ; GET DIGIT IN DISPLAY 3 + LD A,(DISPLAYBUF+4) ; GET DIGIT IN DISPLAY 3 SLA A ; ROTATE IT TO HIGH NIBBLE SLA A ; SLA A ; SLA A ; LD C,A ; STORE IT IN "C" - LD A,(DISPLAYBUF+2) ; GET DIGIT IN DISPLAY 2 + LD A,(DISPLAYBUF+5) ; GET DIGIT IN DISPLAY 2 AND 0FH ; CLEAR HIGH NIBBLE OR C ; ADD IN NIBBLE STORED IN "C" LD H,A ; STORE BYTE IN HIGH BYTE OF ADDRESS POINTER LD A,10H ; CLEAR OUT DISPLAYS 0,1,2 & 3 - LD (DISPLAYBUF),A ; - LD (DISPLAYBUF+1),A ; - LD (DISPLAYBUF+2),A ; - LD (DISPLAYBUF+3),A ; + LD (DISPLAYBUF+7),A ; + LD (DISPLAYBUF+6),A ; + LD (DISPLAYBUF+5),A ; + LD (DISPLAYBUF+4),A ; POP BC ; RESTORE BC RET GETADDRNUM: LD C,A ; - LD A,(DISPLAYBUF+2) ; SHIFT BYTES IN DISPLAY BUF TO THE LEFT - LD (DISPLAYBUF+3),A ; - LD A,(DISPLAYBUF+1) ; - LD (DISPLAYBUF+2),A ; - LD A,(DISPLAYBUF) ; - LD (DISPLAYBUF+1),A ; + LD A,(DISPLAYBUF+5) ; SHIFT BYTES IN DISPLAY BUF TO THE LEFT + LD (DISPLAYBUF+4),A ; + LD A,(DISPLAYBUF+6) ; + LD (DISPLAYBUF+5),A ; + LD A,(DISPLAYBUF+7) ; + LD (DISPLAYBUF+6),A ; LD A,C ; DISPLAY KEYSTROKE IN RIGHT MOST DISPLAY (0) - LD (DISPLAYBUF+0),A ; - JR GETADDRDISP ; -GETADDRCLEAR: - LD A,12H ; CLEAR OUT DISPLAYS 0,1,2 & 3 - LD (DISPLAYBUF),A ; - LD (DISPLAYBUF+1),A ; - LD (DISPLAYBUF+2),A ; - LD (DISPLAYBUF+3),A ; -GETADDRDISP: - LD A,(DISPLAYBUF) ; ENCODE DIGITS IN DISPLAY BUFFER TO DISPLAY - CALL DECODEDISPLAY ; - LD (ADDR),A ; - LD A,(DISPLAYBUF+1) ; - CALL DECODEDISPLAY ; - LD (ADDR+1),A ; - LD A,(DISPLAYBUF+2) ; - CALL DECODEDISPLAY ; - LD (ADDR+2),A ; - LD A,(DISPLAYBUF+3) ; - CALL DECODEDISPLAY ; - LD (ADDR+3),A ; - JP GETADDR1 ; -; -;__DSPSECTOR__________________________________________________________________ -; -; DISPLAY SECTOR IN HL ON FRONT PANEL -;_____________________________________________________________________________ -; -DSPSECTOR: - PUSH BC ; STORE BC - PUSH HL ; STORE HL - LD A,H ; DISPLAY HIGH BYTE, HIGH NIBBLE - SRL A ; - SRL A ; - SRL A ; - SRL A ; - AND 0FH ; - CALL DECODEDISPLAY ; - LD (SEC+3),A ; - LD A,H ; DISPLAY HIGH BYTE, LOW NIBBLE - AND 0FH ; - CALL DECODEDISPLAY ; - LD (SEC+2),A ; - LD A,L ; DISPLAY LOW BYTE, HIGH NIBBLE - AND 0F0H ; - SRL A ; - SRL A ; - SRL A ; - SRL A ; - AND 0FH ; - CALL DECODEDISPLAY ; - LD (SEC+1),A ; DISPLAY LOW BYTE, LOW NIBBLE - LD A,L ; - AND 0FH ; - CALL DECODEDISPLAY ; - LD (SEC),A ; - LD HL,SEC ; DISPLAY PROMPT - CALL SEGDISPLAY ; - POP HL ; RESTORE HL - POP BC ; RESTORE BC - RET + LD (DISPLAYBUF+7),A ; + JR GETADDR1 ; ; ;__GETPORT____________________________________________________________________ ; @@ -1384,10 +1329,14 @@ DSPSECTOR: ; GETPORT: PUSH BC ; STORE BC - JR GETPORTCLEAR ; +GETPORT0: + LD HL,PORT ; INITIALIZE DISPLAYBUF + LD DE,DISPLAYBUF + LD BC,8 + LDIR GETPORT1: - LD HL,PORT ; DISPLAY PROMPT - CALL SEGDISPLAY ; + LD HL,DISPLAYBUF ; DISPLAY PROMPT + CALL ENCDISPLAY ; GETPORTLOOP: CALL KB_GET ; CP 10H ; @@ -1395,44 +1344,32 @@ GETPORTLOOP: CP 13H ; EN PRESSED, DONE JR Z,GETPORTDONE ; CP 12H ; CLEAR PRESSED, CLEAR - JR Z,GETPORTCLEAR ; + JR Z,GETPORT0 JR GETPORTLOOP ; INVALID KEY, LOOP GETPORTDONE: - LD A,(DISPLAYBUF+1) ; + LD A,(DISPLAYBUF+6) ; SLA A ; SLA A ; SLA A ; SLA A ; LD C,A ; - LD A,(DISPLAYBUF) ; + LD A,(DISPLAYBUF+7) ; AND 0FH ; OR C ; LD C,A ; LD A,10H ; - LD (DISPLAYBUF),A ; - LD (DISPLAYBUF+1),A ; + LD (DISPLAYBUF+7),A ; + LD (DISPLAYBUF+6),A ; LD A,C ; POP BC ; RESTORE BC RET GETPORTNUM: LD C,A ; - LD A,(DISPLAYBUF) ; - LD (DISPLAYBUF+1),A ; + LD A,(DISPLAYBUF+7) ; + LD (DISPLAYBUF+6),A ; LD A,C ; - LD (DISPLAYBUF+0),A ; - JR GETPORTDISP ; -GETPORTCLEAR: - LD A,12H ; - LD (DISPLAYBUF),A ; - LD (DISPLAYBUF+1),A ; -GETPORTDISP: - LD A,(DISPLAYBUF) ; - CALL DECODEDISPLAY ; - LD (PORT),A ; - LD A,(DISPLAYBUF+1) ; - CALL DECODEDISPLAY ; - LD (PORT+1),A ; - JP GETPORT1 ; + LD (DISPLAYBUF+7),A ; + JR GETPORT1 ; ; ;__GETVALUE___________________________________________________________________ ; @@ -1443,8 +1380,7 @@ GETVALUE: PUSH BC ; STORE BC JR GETVALUECLEAR ; GETVALUE1: - CALL HEXDISPLAY ; - + CALL ENCDISPLAY ; GETVALUELOOP: CALL KB_GET ; CP 10H ; @@ -1455,33 +1391,33 @@ GETVALUELOOP: JR Z,GETVALUECLEAR ; JR GETVALUELOOP ; INVALID KEY, LOOP GETVALUEDONE: - LD A,(DISPLAYBUF+1) ; + LD A,(DISPLAYBUF+6) ; SLA A ; SLA A ; SLA A ; SLA A ; LD C,A ; - LD A,(DISPLAYBUF) ; + LD A,(DISPLAYBUF+7) ; AND 0FH ; OR C ; LD C,A ; LD A,10H ; - LD (DISPLAYBUF),A ; - LD (DISPLAYBUF+1),A ; + LD (DISPLAYBUF+7),A ; + LD (DISPLAYBUF+6),A ; LD A,C ; POP BC ; RESTORE BC RET GETVALUENUM: LD C,A ; - LD A,(DISPLAYBUF) ; - LD (DISPLAYBUF+1),A ; + LD A,(DISPLAYBUF+7) ; + LD (DISPLAYBUF+6),A ; LD A,C ; - LD (DISPLAYBUF+0),A ; + LD (DISPLAYBUF+7),A ; JR GETVALUE1 ; GETVALUECLEAR: LD A,12H ; - LD (DISPLAYBUF),A ; - LD (DISPLAYBUF+1),A ; + LD (DISPLAYBUF+7),A ; + LD (DISPLAYBUF+6),A ; JP GETVALUE1 ; ; ;__MTERM_INIT_________________________________________________________________ @@ -1508,77 +1444,37 @@ KB_GET: POP HL ; RESTORE HL RET ; -PAUSE: -KB_SCAN_DELAY: - NOP - NOP - NOP - NOP - NOP - NOP - NOP - NOP - NOP - RET -; -;__HEXDISPLAY_________________________________________________________________ +;__ENCDISPLAY_________________________________________________________________ ; -; DISPLAY CONTENTS OF DISPLAYBUF IN DECODED HEX BITS 0-3 ARE DISPLAYED DIG, BIT 7 IS DP -; +; DISPLAY CONTENTS OF DISPLAYBUF DECODED PER SEGDECODE TABLE ;_____________________________________________________________________________ ; -HEXDISPLAY: - PUSH HL ; STORE HL - PUSH AF ; STORE AF - PUSH BC ; STORE BC - LD BC,0007H - ADD HL,BC - LD B,08H ; SET DIGIT COUNT - LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF - OUT (PPIC),A ; OUTPUT - CALL PAUSE ; WAIT - LD A,0F0H ; SET CONTROL TO 1111 (DATA COMING, HEX DECODE,NO DECODE, NORMAL) - OUT (PPIA),A ; OUTPUT TO PORT - LD A,80H | 30H ; STROBE WRITE PULSE WITH CONTROL=1 - OUT (PPIC),A ; OUTPUT TO PORT - CALL PAUSE ; WAIT - LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF - OUT (PPIC),A ; OUTPUT -HEXDISPLAY_LP: - LD A,(HL) ; GET DISPLAY DIGIT - CALL DECODEDISPLAY ; DECODE DISPLAY - OUT (PPIA),A ; OUT TO PPIA - LD A,00H | 30H ; SET WRITE STROBE - OUT (PPIC),A ; OUT TO PPIC - CALL PAUSE ; DELAY - LD A,40H | 30H ; SET CONTROL PORT OFF - OUT (PPIC),A ; OUT TO PPIC - CALL PAUSE ; WAIT - DEC HL ; INC POINTER - DJNZ HEXDISPLAY_LP ; LOOP FOR NEXT DIGIT +ENCDISPLAY: + PUSH HL ; SAVE HL + PUSH AF ; SAVE AF + PUSH BC ; SAVE BC + PUSH DE ; SAVE DE + LD DE,DECODEBUF ; DESTINATION FOR DECODED BYTES + LD B,8 ; NUMBER OF BYTES TO DECODE +ENCDISPLAY1: + LD A,(HL) ; GET SOURCE BYTE + INC HL ; BUMP TO NEXT BYTE FOR NEXT PASS + PUSH HL ; SAVE POINTER + LD HL,SEGDECODE + CALL ADDHLA + LD A,(HL) ; GET DECODED VALUE + LD (DE),A ; SAVE IN DEST BUF + INC DE ; INC DEST BUF PTR + POP HL ; RESTORE POINTER + DJNZ ENCDISPLAY1 ; LOOP THRU ALL BUF POSITIONS + LD HL,DECODEBUF ; POINT TO DECODED BUFFER + CALL SEGDISPLAY ; DISPLAY IT + POP DE ; RESTORE DE POP BC ; RESTORE BC POP AF ; RESTORE AF POP HL ; RESTORE HL RET ; -;__DECODEDISPLAY______________________________________________________________ -; -; DISPLAY CONTENTS OF DISPLAYBUF IN DECODED HEX BITS 0-3 ARE DISPLAYED DIG, BIT 7 IS DP -; -;_____________________________________________________________________________ -; -DECODEDISPLAY: - PUSH BC ; STORE BC - PUSH HL ; STORE HL - LD HL,SEGDECODE ; POINT HL TO DECODE TABLE - LD B,00H ; RESET HIGH BYTE - LD C,A ; CHAR INTO LOW BYTE - ADD HL,BC ; SET TABLE POINTER - LD A,(HL) ; GET VALUE - POP HL ; RESTORE HL - POP BC ; RESTORE BC - RET -; ;__SEGDISPLAY_________________________________________________________________ ; ; DISPLAY CONTENTS OF DISPLAYBUF IN DECODED HEX BITS 0-3 ARE DISPLAYED DIG, BIT 7 IS DP @@ -1586,43 +1482,18 @@ DECODEDISPLAY: ;_____________________________________________________________________________ ; SEGDISPLAY: - PUSH AF ; STORE AF - PUSH BC ; STORE BC - LD BC,0007H - ADD HL,BC - LD B,08H ; SET DIGIT COUNT - LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF - OUT (PPIC),A ; OUTPUT - CALL PAUSE ; WAIT - LD A,0F0H ; SET CONTROL TO 1111 (DATA COMING, HEX DECODE,NO DECODE, NORMAL) - OUT (PPIA),A ; OUTPUT TO PORT - LD A,80H | 30H ; STROBE WRITE PULSE WITH CONTROL=1 - OUT (PPIC),A ; OUTPUT TO PORT - CALL PAUSE ; WAIT - LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF - OUT (PPIC),A ; OUTPUT -SEGDISPLAY_LP: - LD A,(HL) ; GET DISPLAY DIGIT - OUT (PPIA),A ; OUT TO PPIA - LD A,00H | 30H ; SET WRITE STROBE - OUT (PPIC),A ; OUT TO PPIC - CALL PAUSE ; DELAY - LD A,40H | 30H ; SET CONTROL PORT OFF - OUT (PPIC),A ; OUT TO PPIC - CALL PAUSE ; WAIT - DEC HL ; INC POINTER - DJNZ SEGDISPLAY_LP ; LOOP FOR NEXT DIGIT - POP BC ; RESTORE BC - POP AF ; RESTORE AF + PUSH AF + PUSH BC + CALL DSKY_SHOWRAW + POP BC + POP AF RET ; -CPUUP .DB $84,$EE,$BB,$80,$BB,$EE,$CB,$84 -ADDR .DB $00,$00,$00,$00,$8C,$BD,$BD,$FE -PORT .DB $00,$00,$80,$80,$94,$8C,$9D,$EE -SEC .DB $80,$80,$80,$80,$80,$CB,$CF,$D7 +CPUUP .DB $84,$CB,$EE,$BB,$80,$BB,$EE,$84 ; "-CPU UP-" (RAW) +ADDR .DB $17,$18,$19,$10,$00,$00,$00,$00 ; "Adr 0000" (ENCODED) +PORT .DB $13,$14,$15,$16,$10,$10,$00,$00 ; "Port 00" (ENCODED) ;_KB DECODE TABLE_____________________________________________________________ -; ; KB_DECODE: ; 0 1 2 3 4 5 6 7 8 9 A B C D E F @@ -1643,14 +1514,18 @@ KB_DECODE: ; ;_HEX 7_SEG_DECODE_TABLE______________________________________________________ ; -; 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, ,- +; 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, ,-,.,P,o ; AND WITH 7FH TO TURN ON DP ;_____________________________________________________________________________ SEGDECODE: - .DB $FB,$B0,$ED,$F5,$B6,$D7,$DF,$F0,$FF,$F7,$FE,$9F - .DB $CB,$BD,$CF,$CE,$80,$84,$00,$EE,$9D + ; 0 1 2 3 4 5 6 7 8 9 A B C D E F + .DB $FB,$B0,$ED,$F5,$B6,$D7,$DF,$F0,$FF,$F7,$FE,$9F,$CB,$BD,$CF,$CE + ; - . P o r t A d r + .DB $80,$84,$00,$EE,$9D,$8C,$94,$FE,$BD,$8C + ; DISPLAYBUF: .FILL 8,0 +DECODEBUF: .FILL 8,0 ; #ELSE ; diff --git a/Source/HBIOS/dsky.asm b/Source/HBIOS/dsky.asm index 97784078..d7b2e9eb 100644 --- a/Source/HBIOS/dsky.asm +++ b/Source/HBIOS/dsky.asm @@ -210,15 +210,32 @@ DSKY_HEXOUT1: INC HL INC DE ; NEXT BYTE DJNZ DSKY_HEXOUT1 + LD HL,DSKY_BUF + JR DSKY_SHOWHEX +; +;================================================================================================== +; DSKY SHOW BUFFER +; HL: ADDRESS OF BUFFER +; ENTER @ SHOWHEX FOR HEX DECODING +; ENTER @ SHOWRAW FOR DIRECT SEGMENT DECODING +;================================================================================================== +; +DSKY_SHOWHEX: + LD A,$D0 ; 7218 -> (DATA COMING, HEXA DECODE) + JR DSKY_SHOW + +DSKY_SHOWRAW: + LD A,$F0 ; 7218 -> (DATA COMING, NO DECODE) + JR DSKY_SHOW +DSKY_SHOW: + PUSH AF ; SAVE 7218 CONTROL BITS LD A,82H ; SETUP PPI OUT (PPIX),A CALL DSKY_COFF - LD A,0D0H ; 7218 -> (DATA COMING, HEXA DECODE) + POP AF OUT (PPIA),A CALL DSKY_STROBEC - - LD HL,DSKY_BUF ; POINT TO START OF BUF LD B,DSKY_BUFLEN ; NUMBER OF DIGITS LD C,PPIA DSKY_HEXOUT2: diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index cd681d86..ffd92679 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -108,124 +108,123 @@ INT_IM1 .EQU $FF00 ; ; RUN THE BOOT LOADER MENU ; - - LD DE,STR_BANNER ; DISPLAY BOOT BANNER + LD DE,STR_BANNER ; DISPLAY BOOT BANNER DOBOOTMENU: - CALL WRITESTR ; DISPLAY MESSAGE OR ERROR - CALL NEWLINE + CALL WRITESTR ; DISPLAY MESSAGE OR ERROR + CALL NEWLINE ; #IF (DSKYENABLE) - LD HL,BOOT ; POINT TO BOOT MESSAGE - CALL SEGDISPLAY ; DISPLAY MESSAGE + LD HL,BOOT ; POINT TO BOOT MESSAGE + CALL DSKY_SHOWRAW ; DISPLAY MESSAGE #ENDIF ; #IF (BOOTTYPE == BT_AUTO) - LD BC,100 * BOOT_TIMEOUT - LD (BL_TIMEOUT),BC + LD BC,100 * BOOT_TIMEOUT + LD (BL_TIMEOUT),BC #ENDIF ; - LD B,MENU_N ; DISPLAY ALL ROM MENU ENTRIES - LD DE,MENU_S - LD HL,MENU_V + LD B,MENU_N ; DISPLAY ALL ROM MENU ENTRIES + LD DE,MENU_S + LD HL,MENU_V MENU_L: PUSH DE WRITE_M:PUSH BC - PUSH HL - PUSH DE - POP HL - LD BC,10 - ADD HL,BC ; HL POINTS TO MENU KEY -WRITEM1:LD A,(DE) - CP '$' ; TEST FOR STRING TERMINATOR - JP Z,WRITEM2 - CP (HL) - JR NZ,WRITEM3 - LD A,'(' - CALL COUT - LD A,(DE) - CALL COUT - LD A,')' + PUSH HL + PUSH DE + POP HL + LD BC,10 + ADD HL,BC ; HL POINTS TO MENU KEY +WRITEM1:LD A,(DE) + CP '$' ; TEST FOR STRING TERMINATOR + JP Z,WRITEM2 + CP (HL) + JR NZ,WRITEM3 + LD A,'(' + CALL COUT + LD A,(DE) + CALL COUT + LD A,')' WRITEM3:CALL COUT - INC DE - JR WRITEM1 -WRITEM2:POP HL - POP BC + INC DE + JR WRITEM1 +WRITEM2:POP HL + POP BC - POP DE - EX DE,HL - ADD HL,DE - EX DE,HL - DJNZ MENU_L ; NEXT MENU ITEM + POP DE + EX DE,HL + ADD HL,DE + EX DE,HL + DJNZ MENU_L ; NEXT MENU ITEM - CALL NEWLINE ; DISPLAY AVAILABLE DRIVES - CALL PRTALL - CALL PC_COLON + CALL NEWLINE ; DISPLAY AVAILABLE DRIVES + CALL PRTALL + CALL PC_COLON DB_BOOTLOOP: - CALL CST ; CHECK CONSOLE INPUT - OR A - JR NZ,GOTK1 + CALL CST ; CHECK CONSOLE INPUT + OR A + JR NZ,GOTK1 #IF (DSKYENABLE) - CALL KY_STAT ; CHECK DSKY INPUR - OR A - JR Z,GOTNK + CALL KY_STAT ; CHECK DSKY INPUR + OR A + JR Z,GOTNK - CALL KY_GET - JR MENU_A + CALL KY_GET + JR MENU_A #ENDIF -GOTNK: ; CHECK AUTOBOOT TIMEOUT +GOTNK: ; CHECK AUTOBOOT TIMEOUT #IF (BOOTTYPE == BT_AUTO) - LD DE,625 ; DELAY FOR 10MS TO MAKE TIMEOUT CALC EASY - CALL VDELAY ; 16US * 625 = 10MS - LD BC,(BL_TIMEOUT) ; CHECK/INCREMENT TIMEOUT - DEC BC - LD (BL_TIMEOUT),BC - LD A,B - OR C - JP NZ,DB_BOOTLOOP - - LD A,BOOT_DEFAULT ; TIMEOUT EXPIRED, - JR MENU_A ; PERFORM DEFAULT BOOT ACTION + LD DE,625 ; DELAY FOR 10MS TO MAKE TIMEOUT CALC EASY + CALL VDELAY ; 16US * 625 = 10MS + LD BC,(BL_TIMEOUT) ; CHECK/INCREMENT TIMEOUT + DEC BC + LD (BL_TIMEOUT),BC + LD A,B + OR C + JP NZ,DB_BOOTLOOP + + LD A,BOOT_DEFAULT ; TIMEOUT EXPIRED, + JR MENU_A ; PERFORM DEFAULT BOOT ACTION #ENDIF - JR DB_BOOTLOOP + JR DB_BOOTLOOP GOTK1: CALL CINUC -MENU_A: LD B,MENU_N - LD DE,MENU_S+10-MENU_V - LD HL,MENU_V -MENU_C: EX DE,HL - ADD HL,DE - CP (HL) - EX DE,HL - JR Z,MENU_X - DJNZ MENU_C ; FALL THRU IF IT DOES NOT MATCH ROM MENU - -; CHECK FOR DRIVE EXECUTION - - CP '0' ; 0-9, DISK DEVICE - JR C,DB_INVALID - CP '9' + 1 - JR NC,DB_INVALID - SUB '0' - JP GOBOOTDISK +MENU_A: LD B,MENU_N + LD DE,MENU_S+10-MENU_V + LD HL,MENU_V +MENU_C: EX DE,HL + ADD HL,DE + CP (HL) + EX DE,HL + JR Z,MENU_X + DJNZ MENU_C ; FALL THRU IF IT DOES NOT MATCH ROM MENU + +; CHECK FOR DRIVE EXECUTION + + CP '0' ; 0-9, DISK DEVICE + JR C,DB_INVALID + CP '9' + 1 + JR NC,DB_INVALID + SUB '0' + JP GOBOOTDISK MENU_X: CALL NEWLINE - EX DE,HL ; WE HAVE A VALID ROM MENU OPTION - INC HL - LD E,(HL) - INC HL - LD D,(HL) - EX DE,HL - JP (HL) ; JUMP TO THE ROUTINE TO EXECUTE IT + EX DE,HL ; WE HAVE A VALID ROM MENU OPTION + INC HL + LD E,(HL) + INC HL + LD D,(HL) + EX DE,HL + JP (HL) ; JUMP TO THE ROUTINE TO EXECUTE IT DB_INVALID: - LD DE,STR_INVALID - JP DOBOOTMENU + LD DE,STR_INVALID + JP DOBOOTMENU #DEFINE MENU_L(M1,M2,M3,M4,M5,M6,M7,M8,M9,M10) \ #DEFCONT \ .DB M1 @@ -253,55 +252,55 @@ MENU_1: MENU_L("CP/M $ $", "C", GOROM, BID_BIOSIMG, CPM_ENT, 2000h, MENU_L("DSKY-MON $", "D", GOROM, BID_BIOSIMG, MON_DSKY, 1000h, MON_LOC, MON_SIZ, BID_USR, "DSKY Monitor$") #ENDIF - .DB "REBOOT$ ", "R" - .DW REBOOT + .DB "REBOOT$ ", "R" + .DW REBOOT MENU_E: MENU_V .EQU MENU_1-MENU_S ; LENGTH OF EACH MENU RECORD -MENU_N .EQU ((MENU_E-MENU_S)/MENU_V)+1; NUMBER OF MENU ITEMS +MENU_N .EQU ((MENU_E-MENU_S)/MENU_V)+1 ; NUMBER OF MENU ITEMS ; ; BOOT OPTION PROCESSING ; -GOROM: EX DE,HL - INC HL ; HL POINTS TO source-bank +GOROM: EX DE,HL + INC HL ; HL POINTS TO source-bank - LD B,4 ; PUT NEXT FOUR ADDRESSES ON STACK -GOROM_1:INC HL - LD E,(HL) - INC HL - LD D,(HL) - PUSH DE - DJNZ GOROM_1 + LD B,4 ; PUT NEXT FOUR ADDRESSES ON STACK +GOROM_1:INC HL + LD E,(HL) + INC HL + LD D,(HL) + PUSH DE + DJNZ GOROM_1 - POP BC ; SIZE - POP DE ; DEST - POP HL ; SOURCE - LDIR - JR CHAIN - -GOROMB: EX DE,HL - INC HL ; HL POINTS TO source-bank - - LD B,4 ; PUT NEXT FOUR ADDRESSES ON STACK -GOROMB1:INC HL - LD E,(HL) - INC HL - LD D,(HL) - PUSH DE - DJNZ GOROMB1 + POP BC ; SIZE + POP DE ; DEST + POP HL ; SOURCE + LDIR + JR CHAIN + +GOROMB: EX DE,HL + INC HL ; HL POINTS TO source-bank + + LD B,4 ; PUT NEXT FOUR ADDRESSES ON STACK +GOROMB1:INC HL + LD E,(HL) + INC HL + LD D,(HL) + PUSH DE + DJNZ GOROMB1 - POP HL ; SIZE - LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY - LD D,BID_USR ; D = DEST BANK = USER BANK - LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK - RST 08 + POP HL ; SIZE + LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY + LD D,BID_USR ; D = DEST BANK = USER BANK + LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK + RST 08 - POP DE ; DEST - POP HL ; SOURCE - LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY - RST 08 ; DO IT + POP DE ; DEST + POP HL ; SOURCE + LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY + RST 08 ; DO IT -CHAIN: ; EXPECT EXEC ADDRESS ON TOP OF STACK +CHAIN: ; EXPECT EXEC ADDRESS ON TOP OF STACK #IF (PLATFORM == PLT_UNA) LD BC,$00FB ; GET LOWER PAGE ID @@ -324,17 +323,17 @@ CHAIN: ; EXPECT EXEC ADDRESS ON TOP OF STACK RST 08 ; LD A,BID_USR ; ACTIVATE USER BANK - POP HL ; RECOVER ENTRY ADDRESS - DI ; ENTER WITH INTS DISABLED + POP HL ; RECOVER ENTRY ADDRESS + DI ; ENTER WITH INTS DISABLED CALL HB_BNKCALL ; AND GO HALT ; WE SHOULD NEVER RETURN!!! #ENDIF ; -; REBOOT ROMLDR +; REBOOT ROMLDR ; -REBOOT: LD A,BID_BOOT ; BOOT BANK - LD HL,0 ; ADDRESS ZERO - CALL HB_BNKCALL ; DOES NOT RETURN +REBOOT: LD A,BID_BOOT ; BOOT BANK + LD HL,0 ; ADDRESS ZERO + CALL HB_BNKCALL ; DOES NOT RETURN GOBOOTDISK: LD (BL_BOOTID),A @@ -544,50 +543,6 @@ DB_ERR: LD DE,STR_BOOTERR JP DOBOOTMENU ; -#IF (DSKYENABLE) -; -;__SEGDISPLAY________________________________________________________________________________________ -; -; DISPLAY CONTENTS OF DISPLAYBUF IN DECODED HEX BITS 0-3 ARE DISPLAYED DIG, BIT 7 IS DP -;____________________________________________________________________________________________________ -; -SEGDISPLAY: - PUSH AF ; STORE AF - PUSH BC ; STORE BC - PUSH HL ; STORE HL - LD BC,0007H - ADD HL,BC - LD B,08H ; SET DIGIT COUNT - LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF - OUT (PPIC),A ; OUTPUT - CALL DLY2 ; WAIT - LD A,0F0H ; SET CONTROL TO 1111 (DATA COMING, HEX DECODE,NO DECODE, NORMAL) - -SEGDISPLAY1: ; - OUT (PPIA),A ; OUTPUT TO PORT - LD A,80H | 30H ; STROBE WRITE PULSE WITH CONTROL=1 - OUT (PPIC),A ; OUTPUT TO PORT - CALL DLY2 ; WAIT - LD A,40H | 30H ; SET CONTROL PORT 7218 TO OFF - OUT (PPIC),A ; OUTPUT - -SEGDISPLAY_LP: - LD A,(HL) ; GET DISPLAY DIGIT - OUT (PPIA),A ; OUT TO PPIA - LD A,00H | 30H ; SET WRITE STROBE - OUT (PPIC),A ; OUT TO PPIC - CALL DLY2 ; DELAY - LD A,40H | 30H ; SET CONTROL PORT OFF - OUT (PPIC),A ; OUT TO PPIC - CALL DLY2 ; WAIT - DEC HL ; INC POINTER - DJNZ SEGDISPLAY_LP ; LOOP FOR NEXT DIGIT - POP HL ; RESTORE HL - POP BC ; RESTORE BC - POP AF ; RESTORE AF - RET -#ENDIF - #IF (PLATFORM == PLT_UNA) ; ; @@ -782,11 +737,10 @@ STR_BOOTERR .DB "\r\nBoot failure!$" STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader" STR_NL .DB "\r\n$" ; - .IF DSKYENABLE -BOOT: -; . . t o o b - .DB 00H, 00H, 80H, 80H, 094H, 09DH, 09DH, 09FH - .ENDIF +#IF (DSKYENABLE) + ; b o o t . . +BOOT .DB $9F,$9D,$9D,$94,$80,$80,$00,$00 +#ENDIF ; #DEFINE USEDELAY #INCLUDE "util.asm"