Browse Source

Finish DBGMON and Cleanup

pull/23/head
Wayne Warthen 7 years ago
parent
commit
dd73ec092b
  1. 1
      Source/HBIOS/cfg_mk4.asm
  2. 1
      Source/HBIOS/cfg_n8.asm
  3. 1
      Source/HBIOS/cfg_rc.asm
  4. 1
      Source/HBIOS/cfg_rc180.asm
  5. 1
      Source/HBIOS/cfg_zeta.asm
  6. 357
      Source/HBIOS/dbgmon.asm
  7. 23
      Source/HBIOS/dsky.asm
  8. 312
      Source/HBIOS/romldr.asm

1
Source/HBIOS/cfg_mk4.asm

@ -19,6 +19,7 @@ HTIMENABLE .EQU FALSE ; TRUE FOR SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC 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 ASCIENABLE .EQU TRUE ; TRUE FOR Z180 ASCI SUPPORT
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)

1
Source/HBIOS/cfg_n8.asm

@ -19,6 +19,7 @@ HTIMENABLE .EQU FALSE ; TRUE FOR SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC 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 ASCIENABLE .EQU TRUE ; TRUE FOR Z180 ASCI SUPPORT
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)

1
Source/HBIOS/cfg_rc.asm

@ -19,6 +19,7 @@ HTIMENABLE .EQU FALSE ; TRUE FOR SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
DSRTCENABLE .EQU FALSE ; DS-1302 CLOCK DRIVER DSRTCENABLE .EQU FALSE ; DS-1302 CLOCK DRIVER
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC 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 ASCIENABLE .EQU FALSE ; TRUE FOR Z180 ASCI SUPPORT
UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)

1
Source/HBIOS/cfg_rc180.asm

@ -19,6 +19,7 @@ HTIMENABLE .EQU FALSE ; TRUE FOR SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
DSRTCENABLE .EQU FALSE ; DS-1302 CLOCK DRIVER DSRTCENABLE .EQU FALSE ; DS-1302 CLOCK DRIVER
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC 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 ASCIENABLE .EQU TRUE ; TRUE FOR Z180 ASCI SUPPORT
UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) UARTENABLE .EQU FALSE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)

1
Source/HBIOS/cfg_zeta.asm

@ -19,6 +19,7 @@ HTIMENABLE .EQU FALSE ; TRUE FOR SIMH TIMER SUPPORT
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC 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 ASCIENABLE .EQU FALSE ; TRUE FOR Z180 ASCI SUPPORT
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)

357
Source/HBIOS/dbgmon.asm

@ -1072,29 +1072,29 @@ PORTREADLOOP:
SRL A ; SRL A ;
SRL A ; 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" LD A,C ; RESTORE PORT VALUE INTO "A"
AND 0FH ; CLEAR HIGH NIB, LEAVING LOW 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" IN A,(C) ; GET PORT VALUE FROM PORT IN "C"
LD C,A ; STORE VALUE IN "C" LD C,A ; STORE VALUE IN "C"
SRL A ; ROTATE HIGH NIB TO LOW SRL A ; ROTATE HIGH NIB TO LOW
SRL A ; SRL A ;
SRL A ; 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" LD A,C ; RESTORE VALUE TO "A"
AND 0FH ; CLEAR HIGH NIB, LEAVING LOW 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 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 A,13H ; "P"
LD (DISPLAYBUF+7),A ; STORE IN DISP 7
LD (DISPLAYBUF+0),A ; STORE IN DISP 7
LD A,14H ; "O" 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 LD HL,DISPLAYBUF ; SET POINTER TO DISPLAY BUFFER
CALL HEXDISPLAY ; DISPLAY BUFFER CONTENTS
CALL ENCDISPLAY ; DISPLAY BUFFER CONTENTS
PORTREADGETKEY: PORTREADGETKEY:
CALL KB_GET ; GET KEY FROM KB CALL KB_GET ; GET KEY FROM KB
CP 12H ; [CL] PRESSED, EXIT CP 12H ; [CL] PRESSED, EXIT
@ -1120,17 +1120,17 @@ PORTWRITELOOP:
SRL A ; SRL A ;
SRL A ; 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" LD A,C ; RESTORE PORT VALUE INTO "A"
AND 0FH ; CLEAR OUT HIGH NIB 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 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 A,13H ; DISPLAY "P" IN DISP 7
LD (DISPLAYBUF+7),A ;
LD (DISPLAYBUF+0),A ;
LD A,14H ; DISPLAY "O" IN DISP 6 LD A,14H ; DISPLAY "O" IN DISP 6
LD (DISPLAYBUF+6),A ;
LD (DISPLAYBUF+1),A ;
LD HL,DISPLAYBUF ; POINT TO DISPLAY BUFFER LD HL,DISPLAYBUF ; POINT TO DISPLAY BUFFER
CALL GETVALUE ; INPUT A BYTE VALUE, RETURN IN "A" CALL GETVALUE ; INPUT A BYTE VALUE, RETURN IN "A"
OUT (C),A ; OUTPUT VALUE TO PORT STORED IN "C" OUT (C),A ; OUTPUT VALUE TO PORT STORED IN "C"
@ -1161,21 +1161,21 @@ DEPOSITLOOP:
SRL A ; SRL A ;
SRL A ; SRL A ;
SRL A ; SRL A ;
LD (DISPLAYBUF+7),A ;
LD (DISPLAYBUF+0),A ;
LD A,H ; LD A,H ;
AND 0FH ; AND 0FH ;
LD (DISPLAYBUF+6),A ;
LD (DISPLAYBUF+1),A ;
LD A,L ; LD A,L ;
SRL A ; SRL A ;
SRL A ; SRL A ;
SRL A ; SRL A ;
SRL A ; SRL A ;
LD (DISPLAYBUF+5),A ;
LD (DISPLAYBUF+2),A ;
LD A,L ; LD A,L ;
AND 0FH ; AND 0FH ;
LD (DISPLAYBUF+4),A ;
LD A,10H ;
LD (DISPLAYBUF+3),A ; LD (DISPLAYBUF+3),A ;
LD A,10H ;
LD (DISPLAYBUF+4),A ;
LD HL,DISPLAYBUF ; LD HL,DISPLAYBUF ;
CALL GETVALUE ; CALL GETVALUE ;
POP HL ; POP HL ;
@ -1212,32 +1212,32 @@ EXAMINELOOP:
SRL A ; SRL A ;
SRL A ; SRL A ;
SRL A ; SRL A ;
LD (DISPLAYBUF+7),A ;
LD (DISPLAYBUF+0),A ;
LD A,H ; RESTORE HIGH BYTE LD A,H ; RESTORE HIGH BYTE
AND 0FH ; CLEAR HIGH NIBBLE 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" LD A,L ; PUT LOW BYTE IN "A"
SRL A ; SHOW HIGH NIBBLE IN DISP 5 SRL A ; SHOW HIGH NIBBLE IN DISP 5
SRL A ; SRL A ;
SRL A ; SRL A ;
SRL A ; SRL A ;
LD (DISPLAYBUF+5),A ;
LD (DISPLAYBUF+2),A ;
LD A,L ; RESTORE LOW BYTE IN "A" LD A,L ; RESTORE LOW BYTE IN "A"
AND 0FH ; CLEAR OUT HIGH NIBBLE 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 A,10H ; CLEAR OUT DISP 3
LD (DISPLAYBUF+3),A ;
LD (DISPLAYBUF+4),A ;
LD A,(HL) ; GET VALUE FROM ADDRESS IN HL LD A,(HL) ; GET VALUE FROM ADDRESS IN HL
SRL A ; DISPLAY HIGH NIB IN DISPLAY 1 SRL A ; DISPLAY HIGH NIB IN DISPLAY 1
SRL A ; SRL A ;
SRL A ; SRL A ;
SRL A ; SRL A ;
LD (DISPLAYBUF+1),A ;
LD (DISPLAYBUF+6),A ;
LD A,(HL) ; GET VALUE FROM ADDRESS IN HL LD A,(HL) ; GET VALUE FROM ADDRESS IN HL
AND 0FH ; CLEAR OUT HIGH NIBBLE 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 LD HL,DISPLAYBUF ; POINT TO DISPLAY BUFFER
CALL HEXDISPLAY ; DISPLAY BUFFER ON DISPLAYS
CALL ENCDISPLAY ; DISPLAY BUFFER ON DISPLAYS
POP HL ; RESTORE HL POP HL ; RESTORE HL
EXAMINEGETKEY: EXAMINEGETKEY:
CALL KB_GET ; GET KEY FROM KB CALL KB_GET ; GET KEY FROM KB
@ -1264,10 +1264,14 @@ EXAMINEEXIT:
; ;
GETADDR: GETADDR:
PUSH BC ; STORE BC PUSH BC ; STORE BC
JR GETADDRCLEAR ;
GETADDR0:
LD HL,ADDR ; INITIALIZE DISPLAYBUF
LD DE,DISPLAYBUF
LD BC,8
LDIR
GETADDR1: GETADDR1:
LD HL,ADDR ; DISPLAY PROMPT
CALL SEGDISPLAY ;
LD HL,DISPLAYBUF ; DISPLAY PROMPT
CALL ENCDISPLAY ;
GETADDRLOOP: GETADDRLOOP:
CALL KB_GET ; CALL KB_GET ;
CP 10H ; CP 10H ;
@ -1275,107 +1279,48 @@ GETADDRLOOP:
CP 13H ; EN PRESSED, DONE CP 13H ; EN PRESSED, DONE
JR Z,GETADDRDONE ; JR Z,GETADDRDONE ;
CP 12H ; CLEAR PRESSED, CLEAR CP 12H ; CLEAR PRESSED, CLEAR
JR Z,GETADDRCLEAR ;
JR Z,GETADDR0 ;
JR GETADDRLOOP ; INVALID KEY, LOOP JR GETADDRLOOP ; INVALID KEY, LOOP
GETADDRDONE: GETADDRDONE:
LD HL,00H ; HL=0 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 ; ROTATE IT TO HIGH NIBBLE
SLA A ; SLA A ;
SLA A ; SLA A ;
SLA A ; SLA A ;
LD C,A ; STORE IT IN "C" 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 AND 0FH ; CLEAR HIGH NIBBLE
OR C ; ADD IN NIBBLE STORED IN C OR C ; ADD IN NIBBLE STORED IN C
LD L,A ; STORE IT IN LOW BYTE OF ADDRESS POINTER 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 ; ROTATE IT TO HIGH NIBBLE
SLA A ; SLA A ;
SLA A ; SLA A ;
SLA A ; SLA A ;
LD C,A ; STORE IT IN "C" 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 AND 0FH ; CLEAR HIGH NIBBLE
OR C ; ADD IN NIBBLE STORED IN "C" OR C ; ADD IN NIBBLE STORED IN "C"
LD H,A ; STORE BYTE IN HIGH BYTE OF ADDRESS POINTER LD H,A ; STORE BYTE IN HIGH BYTE OF ADDRESS POINTER
LD A,10H ; CLEAR OUT DISPLAYS 0,1,2 & 3 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 POP BC ; RESTORE BC
RET RET
GETADDRNUM: GETADDRNUM:
LD C,A ; 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 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____________________________________________________________________ ;__GETPORT____________________________________________________________________
; ;
@ -1384,10 +1329,14 @@ DSPSECTOR:
; ;
GETPORT: GETPORT:
PUSH BC ; STORE BC PUSH BC ; STORE BC
JR GETPORTCLEAR ;
GETPORT0:
LD HL,PORT ; INITIALIZE DISPLAYBUF
LD DE,DISPLAYBUF
LD BC,8
LDIR
GETPORT1: GETPORT1:
LD HL,PORT ; DISPLAY PROMPT
CALL SEGDISPLAY ;
LD HL,DISPLAYBUF ; DISPLAY PROMPT
CALL ENCDISPLAY ;
GETPORTLOOP: GETPORTLOOP:
CALL KB_GET ; CALL KB_GET ;
CP 10H ; CP 10H ;
@ -1395,44 +1344,32 @@ GETPORTLOOP:
CP 13H ; EN PRESSED, DONE CP 13H ; EN PRESSED, DONE
JR Z,GETPORTDONE ; JR Z,GETPORTDONE ;
CP 12H ; CLEAR PRESSED, CLEAR CP 12H ; CLEAR PRESSED, CLEAR
JR Z,GETPORTCLEAR ;
JR Z,GETPORT0
JR GETPORTLOOP ; INVALID KEY, LOOP JR GETPORTLOOP ; INVALID KEY, LOOP
GETPORTDONE: GETPORTDONE:
LD A,(DISPLAYBUF+1) ;
LD A,(DISPLAYBUF+6) ;
SLA A ; SLA A ;
SLA A ; SLA A ;
SLA A ; SLA A ;
SLA A ; SLA A ;
LD C,A ; LD C,A ;
LD A,(DISPLAYBUF) ;
LD A,(DISPLAYBUF+7) ;
AND 0FH ; AND 0FH ;
OR C ; OR C ;
LD C,A ; LD C,A ;
LD A,10H ; LD A,10H ;
LD (DISPLAYBUF),A ;
LD (DISPLAYBUF+1),A ;
LD (DISPLAYBUF+7),A ;
LD (DISPLAYBUF+6),A ;
LD A,C ; LD A,C ;
POP BC ; RESTORE BC POP BC ; RESTORE BC
RET RET
GETPORTNUM: GETPORTNUM:
LD C,A ; LD C,A ;
LD A,(DISPLAYBUF) ;
LD (DISPLAYBUF+1),A ;
LD A,(DISPLAYBUF+7) ;
LD (DISPLAYBUF+6),A ;
LD A,C ; 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___________________________________________________________________ ;__GETVALUE___________________________________________________________________
; ;
@ -1443,8 +1380,7 @@ GETVALUE:
PUSH BC ; STORE BC PUSH BC ; STORE BC
JR GETVALUECLEAR ; JR GETVALUECLEAR ;
GETVALUE1: GETVALUE1:
CALL HEXDISPLAY ;
CALL ENCDISPLAY ;
GETVALUELOOP: GETVALUELOOP:
CALL KB_GET ; CALL KB_GET ;
CP 10H ; CP 10H ;
@ -1455,33 +1391,33 @@ GETVALUELOOP:
JR Z,GETVALUECLEAR ; JR Z,GETVALUECLEAR ;
JR GETVALUELOOP ; INVALID KEY, LOOP JR GETVALUELOOP ; INVALID KEY, LOOP
GETVALUEDONE: GETVALUEDONE:
LD A,(DISPLAYBUF+1) ;
LD A,(DISPLAYBUF+6) ;
SLA A ; SLA A ;
SLA A ; SLA A ;
SLA A ; SLA A ;
SLA A ; SLA A ;
LD C,A ; LD C,A ;
LD A,(DISPLAYBUF) ;
LD A,(DISPLAYBUF+7) ;
AND 0FH ; AND 0FH ;
OR C ; OR C ;
LD C,A ; LD C,A ;
LD A,10H ; LD A,10H ;
LD (DISPLAYBUF),A ;
LD (DISPLAYBUF+1),A ;
LD (DISPLAYBUF+7),A ;
LD (DISPLAYBUF+6),A ;
LD A,C ; LD A,C ;
POP BC ; RESTORE BC POP BC ; RESTORE BC
RET RET
GETVALUENUM: GETVALUENUM:
LD C,A ; LD C,A ;
LD A,(DISPLAYBUF) ;
LD (DISPLAYBUF+1),A ;
LD A,(DISPLAYBUF+7) ;
LD (DISPLAYBUF+6),A ;
LD A,C ; LD A,C ;
LD (DISPLAYBUF+0),A ;
LD (DISPLAYBUF+7),A ;
JR GETVALUE1 ; JR GETVALUE1 ;
GETVALUECLEAR: GETVALUECLEAR:
LD A,12H ; LD A,12H ;
LD (DISPLAYBUF),A ;
LD (DISPLAYBUF+1),A ;
LD (DISPLAYBUF+7),A ;
LD (DISPLAYBUF+6),A ;
JP GETVALUE1 ; JP GETVALUE1 ;
; ;
;__MTERM_INIT_________________________________________________________________ ;__MTERM_INIT_________________________________________________________________
@ -1508,77 +1444,37 @@ KB_GET:
POP HL ; RESTORE HL POP HL ; RESTORE HL
RET 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 BC ; RESTORE BC
POP AF ; RESTORE AF POP AF ; RESTORE AF
POP HL ; RESTORE HL POP HL ; RESTORE HL
RET 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_________________________________________________________________ ;__SEGDISPLAY_________________________________________________________________
; ;
; DISPLAY CONTENTS OF DISPLAYBUF IN DECODED HEX BITS 0-3 ARE DISPLAYED DIG, BIT 7 IS DP ; DISPLAY CONTENTS OF DISPLAYBUF IN DECODED HEX BITS 0-3 ARE DISPLAYED DIG, BIT 7 IS DP
@ -1586,43 +1482,18 @@ DECODEDISPLAY:
;_____________________________________________________________________________ ;_____________________________________________________________________________
; ;
SEGDISPLAY: 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 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 TABLE_____________________________________________________________
;
; ;
KB_DECODE: KB_DECODE:
; 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
@ -1643,14 +1514,18 @@ KB_DECODE:
; ;
;_HEX 7_SEG_DECODE_TABLE______________________________________________________ ;_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 ; AND WITH 7FH TO TURN ON DP
;_____________________________________________________________________________ ;_____________________________________________________________________________
SEGDECODE: 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 DISPLAYBUF: .FILL 8,0
DECODEBUF: .FILL 8,0
; ;
#ELSE #ELSE
; ;

23
Source/HBIOS/dsky.asm

@ -210,15 +210,32 @@ DSKY_HEXOUT1:
INC HL INC HL
INC DE ; NEXT BYTE INC DE ; NEXT BYTE
DJNZ DSKY_HEXOUT1 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 LD A,82H ; SETUP PPI
OUT (PPIX),A OUT (PPIX),A
CALL DSKY_COFF CALL DSKY_COFF
LD A,0D0H ; 7218 -> (DATA COMING, HEXA DECODE)
POP AF
OUT (PPIA),A OUT (PPIA),A
CALL DSKY_STROBEC CALL DSKY_STROBEC
LD HL,DSKY_BUF ; POINT TO START OF BUF
LD B,DSKY_BUFLEN ; NUMBER OF DIGITS LD B,DSKY_BUFLEN ; NUMBER OF DIGITS
LD C,PPIA LD C,PPIA
DSKY_HEXOUT2: DSKY_HEXOUT2:

312
Source/HBIOS/romldr.asm

@ -108,124 +108,123 @@ INT_IM1 .EQU $FF00
; ;
; RUN THE BOOT LOADER MENU ; RUN THE BOOT LOADER MENU
; ;
LD DE,STR_BANNER ; DISPLAY BOOT BANNER
LD DE,STR_BANNER ; DISPLAY BOOT BANNER
DOBOOTMENU: DOBOOTMENU:
CALL WRITESTR ; DISPLAY MESSAGE OR ERROR
CALL NEWLINE
CALL WRITESTR ; DISPLAY MESSAGE OR ERROR
CALL NEWLINE
; ;
#IF (DSKYENABLE) #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 #ENDIF
; ;
#IF (BOOTTYPE == BT_AUTO) #IF (BOOTTYPE == BT_AUTO)
LD BC,100 * BOOT_TIMEOUT
LD (BL_TIMEOUT),BC
LD BC,100 * BOOT_TIMEOUT
LD (BL_TIMEOUT),BC
#ENDIF #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 MENU_L: PUSH DE
WRITE_M:PUSH BC 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 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: DB_BOOTLOOP:
CALL CST ; CHECK CONSOLE INPUT
OR A
JR NZ,GOTK1
CALL CST ; CHECK CONSOLE INPUT
OR A
JR NZ,GOTK1
#IF (DSKYENABLE) #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 #ENDIF
GOTNK: ; CHECK AUTOBOOT TIMEOUT
GOTNK: ; CHECK AUTOBOOT TIMEOUT
#IF (BOOTTYPE == BT_AUTO) #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 #ENDIF
JR DB_BOOTLOOP
JR DB_BOOTLOOP
GOTK1: CALL CINUC 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 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: 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) \ #DEFINE MENU_L(M1,M2,M3,M4,M5,M6,M7,M8,M9,M10) \
#DEFCONT \ .DB M1 #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$") MENU_L("DSKY-MON $", "D", GOROM, BID_BIOSIMG, MON_DSKY, 1000h, MON_LOC, MON_SIZ, BID_USR, "DSKY Monitor$")
#ENDIF #ENDIF
.DB "REBOOT$ ", "R"
.DW REBOOT
.DB "REBOOT$ ", "R"
.DW REBOOT
MENU_E: MENU_E:
MENU_V .EQU MENU_1-MENU_S ; LENGTH OF EACH MENU RECORD 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 ; 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) #IF (PLATFORM == PLT_UNA)
LD BC,$00FB ; GET LOWER PAGE ID LD BC,$00FB ; GET LOWER PAGE ID
@ -324,17 +323,17 @@ CHAIN: ; EXPECT EXEC ADDRESS ON TOP OF STACK
RST 08 RST 08
; ;
LD A,BID_USR ; ACTIVATE USER BANK 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 CALL HB_BNKCALL ; AND GO
HALT ; WE SHOULD NEVER RETURN!!! HALT ; WE SHOULD NEVER RETURN!!!
#ENDIF #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: GOBOOTDISK:
LD (BL_BOOTID),A LD (BL_BOOTID),A
@ -544,50 +543,6 @@ DB_ERR:
LD DE,STR_BOOTERR LD DE,STR_BOOTERR
JP DOBOOTMENU 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) #IF (PLATFORM == PLT_UNA)
; ;
; ;
@ -782,11 +737,10 @@ STR_BOOTERR .DB "\r\nBoot failure!$"
STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader" STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader"
STR_NL .DB "\r\n$" 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 #DEFINE USEDELAY
#INCLUDE "util.asm" #INCLUDE "util.asm"

Loading…
Cancel
Save