; ;================================================================================================== ; HEATH H8 FRONT PANEL (DISPLAY AND KEYBOARD) ROUTINES ;================================================================================================== ; ; LED SEGMENTS (BIT VALUES) ; ; +--02--+ ; 40 04 ; +--01--+ ; 20 08 ; +--10--+ 80 ; ; H8PKEYNONE .EQU $FF ; NONE H8PKEY0 .EQU $FE H8PKEY1 .EQU $FC H8PKEY2 .EQU $FA H8PKEY3 .EQU $F8 H8PKEY4 .EQU $F6 H8PKEY5 .EQU $F4 H8PKEY6 .EQU $F2 H8PKEY7 .EQU $F0 H8PKEY8 .EQU $EF H8PKEY9 .EQU $CF H8PKEYPLUS .EQU $AF ; PLUS H8PKEYMINUS .EQU $8F ; MINUS H8PKEYMUL .EQU $6F ; MULTIPLY H8PKEYDIV .EQU $4F ; DIVIDE H8PKEYNUM .EQU $2F ; NUMBER H8PKEYDOT .EQU $0F ; DOT ; H8P_TICCNT .EQU $FFEA ; TICCNT AT $FFEA IS COPIED DOWN TO $000B FOR HEATH COMPATIBILITY H8P_SPEED .EQU $FFEC ; SPEED CONTROL VALUE IS STORED HERE H8P_SPDIO .EQU $30 H8FPIO .EQU $F0 ; DEVECHO "H8P: IO=" DEVECHO H8FPIO DEVECHO "\n" ; ;-------------------------------------------------------------------------------------------------- ; HBIOS MODULE HEADER ;-------------------------------------------------------------------------------------------------- ; ORG_H8P .EQU $ ; .DW SIZ_H8P ; MODULE SIZE .DW H8P_INITPHASE ; ADR OF INIT PHASE HANDLER ; H8P_INITPHASE: ; INIT PHASE HANDLER, A=PHASE CP HB_PHASE_PREINIT ; PREINIT PHASE? JP Z,H8P_PREINIT ; DO PREINIT CP HB_PHASE_INIT ; INIT PHASE? JP Z,H8P_INIT ; DO INIT RET ; DONE ; ;__H8P_PREINIT_______________________________________________________________________________________ ; ; CONFIGURE AND RESET PANEL ;____________________________________________________________________________________________________ ; ; HARDWARE RESET PRIOR TO ROMWBW CONSOLE INITIALIZATION ; H8P_PREINIT: ; HEATH H8 PLATFORM IMPLEMENTS A CPU SPEED DIVISOR AS SET BY THE ; 2 LS BITS OF PORT H8PSPDIO. THE OSCILLATOR IS NORMALLY 16MHZ. ; 0=FULL (16MHZ), 1=1/2 (8MHZ), 2=1/4 (4 MHZ), 3=1/8 (2 MHZ) ; FOR BOOT, WE SET THE DIVISOR TO HALF (8MHZ)WHICH IS THE FASTEST ; SPEED WE CAN USE THAT STILL ENSURES ALL HARDWARE CAN BE DETECTED. ; E.G., MSX BOARD MAXES OUT AT 8MHZ. LD A,$01 ; 8 MHZ OPERATION OUT (H8P_SPDIO),A ; IMPLEMENT IT LD (H8P_SPEED),A ; UPDATE FP SHADOW ; ; HOOK INTERRUTPS FOR FRONT PANEL OPERATION LD HL,H8P_INTR CALL HB_ADDIM1 ; RET ; ;__H8P_INIT__________________________________________________________________________________________ ; ; DISPLAY H8 FRONT PANEL INFO ON ROMWBW CONSOLE ;____________________________________________________________________________________________________ ; H8P_INIT: CALL NEWLINE ; FORMATTING PRTS("H8FP:$") ; FORMATTING ; PRTS(" IO=0x$") ; FORMATTING LD A,H8FPIO ; GET BASE PORT CALL PRTHEXBYTE ; PRINT BASE PORT ; RET ; DONE ; ; H8 FRONT PANEL INTERRUPT ; H8P_INTR: LD (H8P_BCVAL),BC LD (H8P_DEVAL),DE LD (H8P_HLVAL),HL LD HL,(H8P_TICCNT) ; 2MS TIC COUNTER INC HL LD (H8P_TICCNT),HL CALL H8P_TIMER ; UP TIMER CALL H8P_STAT ; CHECK KEYPAD PRESS CALL H8P_GETSEGIDX ; SEGMENT INDEX IN (C) CALL H8P_HORN OR C OUT (H8FPIO),A ; CLEAR INTERRUPT AND SET LED IDX LD C,A LD A,(H8P_FPENA) OR A LD A,$FF CALL NZ,H8P_GETSEGPAT OUT (H8FPIO+1),A ; SET LED PATTERN ; CALL H8P_KEYPAD LD A,(H8P_STTIMER) INC A AND $1F ; UPDATE LEDS EVERY 32 TICKS LD (H8P_STTIMER),A CALL Z,H8P_HDLSTATE LD A,(H8P_HBTICK) ; ROMWBW TIMER INC A LD (H8P_HBTICK),A CP 10 RET NZ CALL HB_TICK XOR A LD (H8P_HBTICK),A INC A ; INTERRUPT HANDLED RET ; ; HANDLE FRONT PANEL SPEAKER SOUNDS ; H8P_HORN: LD HL,(H8P_HORNDUR) LD A,H OR L LD A,$D0 ; HORN OFF RET Z DEC HL LD (H8P_HORNDUR),HL LD A,$50 ; HORN ON RET ; ; HANDLE UP-TIME TIMER ; H8P_TIMER: LD HL,(H8P_ONESEC) DEC HL LD (H8P_ONESEC),HL LD A,H OR L RET NZ LD HL,(H8P_UPTIME) INC HL LD (H8P_UPTIME),HL LD HL,500 LD (H8P_ONESEC),HL CALL H8P_TIMER1 LD A,(H8P_STATE) OR A CALL Z,H8P_TIMER2 RET ; ADVANCE DIGITS H8P_TIMER1: LD C,9 LD HL,H8P_UPTDIG+8 CALL H8P_ADVDIG RET ; SHOW DIGITS H8P_TIMER2: LD DE,H8P_UPTDIG+8 LD HL,H8P_SEGBUF+8 LD C,9 H8P_TIMER3: PUSH BC PUSH HL LD A,C CP 7 JR Z,H8P_TIMER4 CP 4 JR Z,H8P_TIMER4 JR H8P_TIMER5 H8P_TIMER4: LD A,$80 JR H8P_TIMER6 H8P_TIMER5: LD HL,H8P_DIGMAP LD A,(DE) LD C,A LD B,0 ADD HL,BC LD A,(HL) H8P_TIMER6: POP HL LD (HL),A DEC HL DEC DE POP BC DEC C JR NZ,H8P_TIMER3 RET H8P_ADVDIG: LD A,(HL) ; 000.000.00X INC A LD (HL),A CP 10 ; 0-9 RET NZ LD (HL),0 DEC HL LD A,(HL) ; 000.000.0X0 INC A LD (HL),A CP 6 ; 0-5 RET NZ LD (HL),0 DEC HL DEC HL LD A,(HL) ; 000.00X.000 INC A LD (HL),A CP 10 ; 0-9 RET NZ LD (HL),0 DEC HL LD A,(HL) ; 000.0X0.000 INC A LD (HL),A CP 6 ; 0-5 RET NZ LD (HL),0 DEC HL DEC HL LD A,(HL) ; 00X.000.000 INC A LD (HL),A CP 10 ; 0-9 RET NZ LD (HL),0 DEC HL LD A,(HL) ; 0X0.000.000 INC A LD (HL),A CP 10 ; 0-9 RET NZ LD (HL),0 DEC HL LD A,(HL) ; X00.000.000 INC A LD (HL),A CP 10 ; 0-9 RET NZ LD (HL),0 RET ; ; CHECK FOR KEY PRESS, SAVE RAW VALUE ; H8P_STAT: IN A,(H8FPIO) LD (H8P_KEYBUF),A RET ; ; GET KEY AND RESET KEYBUF ; H8P_GETKEY: LD A,(H8P_KEYBUF) RET ; H8P_KEYPAD: CALL H8P_GETKEY LD C,A LD A,(H8P_LSTKEY) CP C RET Z LD A,C LD (H8P_LSTKEY),A CP H8PKEYNONE RET Z LD HL,$04 LD (H8P_HORNDUR),HL CP H8PKEYDIV ; / KEY (ALTER) JP Z,H8P_KEYPADALT CP H8PKEYMUL ; * KEY (CANCEL) JP Z,H8P_KEYPADCAN CP H8PKEYNUM ; MEM KEY JP Z,H8P_KEYPADMEM CP H8PKEYDOT ; REG KEY JP Z,H8P_KEYPADREG CP H8PKEY9 JP Z,H8P_KEYPAD9 CP H8PKEY8 JP Z,H8P_KEYPAD8 CP H8PKEY7 JP Z,H8P_KEYPAD7 CP H8PKEY6 JP Z,H8P_KEYPAD6 CP H8PKEY5 JP Z,H8P_KEYPAD5 CP H8PKEY4 JP Z,H8P_KEYPAD4 CP H8PKEY3 JP Z,H8P_KEYPAD3 CP H8PKEY2 JP Z,H8P_KEYPAD2 CP H8PKEY1 JP Z,H8P_KEYPAD1 CP H8PKEY0 JP Z,H8P_KEYPAD0 CP H8PKEYPLUS JP Z,H8P_KEYPADPLUS CP H8PKEYMINUS JP Z,H8P_KEYPADMINUS RET ; RESET TIMER H8P_KEYPADALT: LD A,(H8P_FPENA) OR A RET Z LD A,(H8P_STATE) OR A RET NZ XOR A LD C,9 LD HL,H8P_UPTDIG H8P_KEYPADALTL: LD (HL),A INC HL DEC C JR NZ,H8P_KEYPADALTL RET ; ENABLE FRONT PANEL DISPLAY H8P_KEYPADCAN: LD A,(H8P_FPENA) CPL LD (H8P_FPENA),A RET ; SET MEM STATE H8P_KEYPADMEM: LD A,2 LD (H8P_STATE),A LD (H8P_MEMENTER),A XOR A LD (H8P_MEMADRIDX),A CALL H8P_UPDMEMLOC RET ; SET REG STATE H8P_KEYPADREG: LD A,1 LD (H8P_STATE),A XOR A LD (H8P_MEMENTER),A RET ; NOTHING H8P_KEYPAD9: ; RET ; TIMER H8P_KEYPAD8: LD A,(H8P_STATE) CP 2 RET Z LD A,0 LD (H8P_STATE),A RET ; SPEED CONTROL H8P_KEYPAD7: LD A,(H8P_STATE) CP 2 ; MEM MODE LD A,7 JP Z,H8P_KEYPADDIG LD A,3 LD (H8P_STATE),A RET ; PC (OUT) H8P_KEYPAD6: LD A,(H8P_STATE) CP 2 ; MEM MODE LD A,6 JP Z,H8P_KEYPADDIG LD A,5 LD (H8P_REGNUM),A RET ; HL (IN) H8P_KEYPAD5: LD A,(H8P_STATE) CP 2 ; MEM MODE LD A,5 JP Z,H8P_KEYPADDIG LD A,3 LD (H8P_REGNUM),A RET ; DE H8P_KEYPAD4: LD A,(H8P_STATE) CP 2 ; MEM MODE LD A,4 JP Z,H8P_KEYPADDIG LD A,2 LD (H8P_REGNUM),A RET ; BC H8P_KEYPAD3: LD A,(H8P_STATE) CP 2 ; MEM MODE LD A,3 JP Z,H8P_KEYPADDIG LD A,1 LD (H8P_REGNUM),A RET ; AF H8P_KEYPAD2: LD A,(H8P_STATE) CP 2 ; MEM MODE LD A,2 JP Z,H8P_KEYPADDIG LD A,0 LD (H8P_REGNUM),A RET ; SP H8P_KEYPAD1: LD A,(H8P_STATE) CP 2 ; MEM MODE LD A,1 JP Z,H8P_KEYPADDIG LD A,4 LD (H8P_REGNUM),A RET ; NOTHING H8P_KEYPAD0: LD A,(H8P_STATE) CP 2 ; MEM MODE JP NZ,H8P_KEYPAD8 LD A,0 ; H8P_KEYPADDIG: LD C,A LD A,(H8P_MEMENTER) OR A JR Z,H8P_KEYPADDIG1 LD A,(H8P_MEMADRIDX) OR A CALL Z,H8P_SETDIG0 DEC A CALL Z,H8P_SETDIG1 DEC A CALL Z,H8P_SETDIG2 DEC A CALL Z,H8P_SETDIG3 DEC A CALL Z,H8P_SETDIG4 DEC A CALL Z,H8P_SETDIG5 CALL H8P_UPDMEMLOC ; NEXT MEMORY ADR INDEX LD A,(H8P_MEMADRIDX) INC A LD (H8P_MEMADRIDX),A CP 6 RET NZ XOR A LD (H8P_MEMADRIDX),A RET ; CHECK FOR IN/OUT TO PORT H8P_KEYPADDIG1: LD A,C CP 5 ; IN PORT JR Z,H8P_KEYPADINP CP 6 ; OUT PORT JR Z,H8P_KEYPADOUT RET H8P_KEYPADINP: LD BC,(H8P_MEMLOC) IN A,(C) LD B,A LD (H8P_MEMLOC),BC JP H8P_UPDMEMLOC H8P_KEYPADOUT: LD BC,(H8P_MEMLOC) LD A,B OUT (C),A RET H8P_UPDMEMLOC: LD BC,H8P_MEMLOC LD HL,H8P_SEGBUF CALL H8P_FILLOCT RET ; C=VAL H8P_SETDIG0: LD HL,(H8P_MEMLOC) LD B,H CALL H8P_SETOCTH LD H,A LD (H8P_MEMLOC),HL LD A,$FF RET H8P_SETDIG1: LD HL,(H8P_MEMLOC) LD B,H CALL H8P_SETOCTM LD H,A LD (H8P_MEMLOC),HL LD A,$FF RET H8P_SETDIG2: LD HL,(H8P_MEMLOC) LD B,H CALL H8P_SETOCTL LD H,A LD (H8P_MEMLOC),HL LD A,$FF RET H8P_SETDIG3: LD HL,(H8P_MEMLOC) LD B,L CALL H8P_SETOCTH LD L,A LD (H8P_MEMLOC),HL LD A,$FF RET H8P_SETDIG4: LD HL,(H8P_MEMLOC) LD B,L CALL H8P_SETOCTM LD L,A LD (H8P_MEMLOC),HL LD A,$FF RET H8P_SETDIG5: LD HL,(H8P_MEMLOC) LD B,L CALL H8P_SETOCTL LD L,A LD (H8P_MEMLOC),HL XOR A LD (H8P_MEMENTER),A LD A,$FF RET H8P_SETDIGD: LD A,(H8P_MEMVAL) PUSH AF CALL H8P_GETOCTH LD (H8P_SEGBUF+6),A POP AF PUSH AF CALL H8P_GETOCTM LD (H8P_SEGBUF+7),A POP AF CALL H8P_GETOCTL LD (H8P_SEGBUF+8),A RET ; MEM/SPEED INCREASE H8P_KEYPADPLUS: LD A,(H8P_STATE) CP 3 JR Z,H8P_KEYPADPLUS3 CP 2 RET NZ LD HL,(H8P_MEMLOC) INC HL LD (H8P_MEMLOC),HL JP H8P_UPDMEMLOC H8P_KEYPADPLUS3: LD A,(H8P_SPEED) OR A RET Z DEC A ;;;LD (H8P_SPEED),A ;;;OUT (H8P_SPDIO),A ;;;RET ; EXIT VIA HBIOS SPEED CHANGE, W/ L=NEW SPEED JP H8P_SETSPD ; SEE HBIOS.ASM ; MEM/SPEED DECREASE H8P_KEYPADMINUS: LD A,(H8P_STATE) CP 3 JR Z,H8P_KEYPADMINUS3 CP 2 RET NZ LD HL,(H8P_MEMLOC) DEC HL LD (H8P_MEMLOC),HL JP H8P_UPDMEMLOC H8P_KEYPADMINUS3: LD A,(H8P_SPEED) CP 3 RET Z INC A ;;;LD (H8P_SPEED),A ;;;OUT (H8P_SPDIO),A ;;;RET ; EXIT VIA HBIOS H8P SPEED CHANGE, W/ A=NEW SPEED JP H8P_SETSPD ; SEE HBIOS.ASM ; ; HANDLE FRONT PANEL STATE ; H8P_HDLSTATE: LD A,(H8P_STATE) OR A RET Z ; UP-TIME TIMER DEC A JP Z,H8P_HDLREG ; SHOWING REGISTER VALUES DEC A JP Z,H8P_HDLMEM ; SHOWING MEMORY LOCATION VALUE DEC A JP Z,H8P_HDLSPD ; MODIFYING SPEED RET ; H8P_HDLREG: LD A,(H8P_REGNUM) LD HL,H8P_REGAF OR A JP Z,H8P_HDLREGAF DEC A LD HL,H8P_REGBC JP Z,H8P_HDLREGBC DEC A LD HL,H8P_REGDE JP Z,H8P_HDLREGDE DEC A LD HL,H8P_REGHL JP Z,H8P_HDLREGHL DEC A LD HL,H8P_REGSP JP Z,H8P_HDLREGSP DEC A LD HL,H8P_REGPC JP Z,H8P_HDLREGPC RET H8P_HDLREGAF: CALL H8P_UPDLEDS LD HL,HBX_INTSTK DEC HL LD A,(HL) ; (HL)=AF LOW LD (H8P_AFVAL),A DEC HL LD A,(HL) ; (HL)=AF HIGH LD (H8P_AFVAL+1),A LD BC,H8P_AFVAL LD HL,H8P_SEGBUF JP H8P_FILLOCT H8P_HDLREGBC: LD BC,H8P_BCVAL CALL H8P_FILLOCT JP H8P_UPDLEDS H8P_HDLREGDE: LD BC,H8P_DEVAL CALL H8P_FILLOCT JP H8P_UPDLEDS H8P_HDLREGHL: CALL H8P_UPDLEDS ; ;;;LD HL,(HBX_INT_SP) ;;;LD A,(HL) ;;;LD (H8P_HLVAL),A ;;;INC HL ;;;LD A,(HL) ;;;LD (H8P_HLVAL+1),A ; LD A,(HB_CURBNK) ; GET PRE-INT BANK LD D,A ; PUT IN D ; ; HORRIBLE HACK TO MAKE PEEK RETURN TO OUR BANK!!! PUSH AF ; SAVE ORIG HB_CURBNK LD A,BID_BIOS ; MAKE IT OUR BANK LD (HB_CURBNK),A ; OVERRIDE FOR PEEK ; ; FOLLOW STACK TO GET PC, USE PEEK IN CASE STACK IN ALT BANK LD HL,(HBX_INT_SP) ; PRE-INT SP HAS HL AT TOS CALL HBX_PEEK ; GET LSB TO E LD C,E ; PUT IN C INC HL ; POINT TO MSB CALL HBX_PEEK ; GET MSB TO E LD B,E ; PUT IN B LD (H8P_HLVAL),BC ; SAVE FOR DISPLAY ; ; UNDO HACK!!! POP AF ; RECOVER HB_CURBNK LD (HB_CURBNK),A ; SAVE RESTORE IT ; LD BC,H8P_HLVAL LD HL,H8P_SEGBUF JP H8P_FILLOCT H8P_HDLREGSP: CALL H8P_UPDLEDS LD HL,(HBX_INT_SP) ; GET INT SAVED SP INC HL ; BUMP TO VAL INC HL ; ... OF SP INC HL ; ... AT TIME INC HL ; ... OF INTERRUPT LD (H8P_SPVAL),HL ; SAVE FOR DISPLAY LD BC,H8P_SPVAL LD HL,H8P_SEGBUF JP H8P_FILLOCT H8P_HDLREGPC: CALL H8P_UPDLEDS ; ;;;LD HL,(HBX_INT_SP) ; (HL)=HL LOW ;;;INC HL ; (HL)=HL HIGH ;;;INC HL ; (HL)=PC LOW ;;;LD A,(HL) ;;;LD (H8P_PCVAL),A ;;;INC HL ; (HL)=PC HIGH ;;;LD A,(HL) ;;;LD (H8P_PCVAL+1),A ; LD A,(HB_CURBNK) ; GET PRE-INT BANK LD D,A ; PUT IN D ; ; HORRIBLE HACK TO MAKE PEEK RETURN TO OUR BANK!!! PUSH AF ; SAVE ORIG HB_CURBNK LD A,BID_BIOS ; MAKE IT OUR BANK LD (HB_CURBNK),A ; OVERRIDE FOR PEEK ; ; FOLLOW STACK TO GET PC, USE PEEK IN CASE STACK IN ALT BANK LD HL,(HBX_INT_SP) ; PRE-INT SP INC HL ; REMOVE 1 LEVEL TO INC HL ; ... POINT TO PRE-INT PC CALL HBX_PEEK ; GET LSB TO E LD C,E ; PUT IN C INC HL ; POINT TO MSB CALL HBX_PEEK ; GET MSB TO E LD B,E ; PUT IN B LD (H8P_PCVAL),BC ; SAVE FOR DISPLAY ; ; UNDO HACK!!! POP AF ; RECOVER HB_CURBNK LD (HB_CURBNK),A ; SAVE RESTORE IT ; LD BC,H8P_PCVAL LD HL,H8P_SEGBUF JP H8P_FILLOCT H8P_HDLMEM: CALL H8P_SETDIGD RET H8P_HDLSPD: LD HL,H8P_SPD16 LD A,(H8P_SPEED) OR A JR Z,H8P_UPDLEDS LD HL,H8P_SPD08 DEC A JR Z,H8P_UPDLEDS LD HL,H8P_SPD04 DEC A JR Z,H8P_UPDLEDS LD HL,H8P_SPD02 H8P_UPDLEDS: LD C,9 LD DE,H8P_SEGBUF H8P_UPDLEDS1: LD A,(HL) INC HL LD (DE),A INC DE DEC C JR NZ,H8P_UPDLEDS1 RET ; H8P_GETSEGIDX: LD A,(H8P_SEGIDX) DEC A LD (H8P_SEGIDX),A LD C,A RET NZ LD A,9 LD (H8P_SEGIDX),A LD C,A RET ; ; A = SEG IDX ; ; +--02--+ ; 40 04 ; +--01--+ ; 20 08 ; +--10--+ 80 ; H8P_GETSEGPAT: LD A,C AND $0F ; IDX=1 THRU 9 DEC A LD C,A LD B,0 LD HL,H8P_SEGBUF ADD HL,BC LD E,(HL) LD A,(H8P_MEMENTER) OR A JR Z,H8P_GETSEGPATX LD A,(H8P_MEMADRIDX) CP C JR NZ,H8P_GETSEGPATX LD A,$80 OR E LD E,A H8P_GETSEGPATX: LD A,E CPL RET ; BC=MEMLOC, HL=LED BUFFER H8P_FILLOCT: PUSH HL INC BC ; POINT TO HIGH BYTE LD A,(BC) CALL H8P_GETOCTH LD (HL),A INC HL LD A,(BC) CALL H8P_GETOCTM LD (HL),A INC HL LD A,(BC) CALL H8P_GETOCTL LD (HL),A INC HL DEC BC ; POINT TO LOW BYTE LD A,(BC) CALL H8P_GETOCTH LD (HL),A INC HL LD A,(BC) CALL H8P_GETOCTM LD (HL),A INC HL LD A,(BC) CALL H8P_GETOCTL LD (HL),A POP HL RET ; HIGH OCTAL BITS H8P_GETOCTH: AND $C0 RRA RRA RRA RRA RRA RRA JR H8P_GETOCTX ; MEDIUM OCTAL BITS H8P_GETOCTM: AND $38 RRA RRA RRA JR H8P_GETOCTX ; LOW OCTAL BITS H8P_GETOCTL: AND $07 H8P_GETOCTX: PUSH HL LD E,A LD D,0 LD HL,H8P_DIGMAP ADD HL,DE LD A,(HL) ; VALUE CONVERTED TO LED SEGMENT PATTERN POP HL RET ; B=CURVAL, C=NEWVAL H8P_SETOCTH: LD A,C AND $03 RLA RLA RLA RLA RLA RLA LD C,A LD A,B AND $3F OR C RET H8P_SETOCTM: LD A,C AND $07 RLA RLA RLA LD C,A LD A,B AND $C7 OR C RET H8P_SETOCTL: LD A,C AND $07 LD C,A LD A,B AND $F8 OR C CALL H8P_BEEP RET ; H8P_BEEP: PUSH HL LD HL,16 LD (H8P_HORNDUR),HL POP HL RET ; ; DEVICE INFORMATION ; H8P_DEVICE: ; LD D,DSKYDEV_H8P ; D := DEVICE TYPE LD E,0 ; E := PHYSICAL DEVICE NUMBER LD H,0 ; H := MODE LD L,H8FPIO ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS RET ; ; DIGITS TO LED PATTERNS ; +--02--+ ; 40 04 ; +--01--+ ; 20 08 ; +--10--+ 80 ; H8P_DIGMAP: ; 0 1 2 3 4 5 6 7 .DB $7E, $0C, $37, $1F, $4D, $5B, $7B, $0E ; 8 9 A B C D E F .DB $7F, $5F, $6F, $79, $72, $3D, $73, $63 ; H8P_REGNUM: .DB 0 H8P_REGAF: .DB $00, $00, $00, $00, $00, $00, $00, $6F, $63 H8P_REGBC: .DB $00, $00, $00, $00, $00, $00, $00, $79, $72 H8P_REGDE: .DB $00, $00, $00, $00, $00, $00, $00, $3D, $73 H8P_REGHL: .DB $00, $00, $00, $00, $00, $00, $00, $6D, $70 H8P_REGSP: .DB $00, $00, $00, $00, $00, $00, $00, $5B, $67 H8P_REGPC: .DB $00, $00, $00, $00, $00, $00, $00, $67, $72 H8P_SPD16: .DB $00, $00, $00, $00, $0C, $7B, $5B, $67, $3D H8P_SPD08: .DB $00, $00, $00, $00, $00, $7F, $5B, $67, $3D H8P_SPD04: .DB $00, $00, $00, $00, $00, $4D, $5B, $67, $3D H8P_SPD02: .DB $00, $00, $00, $00, $00, $37, $5B, $67, $3D H8P_MEMADRIDX: .DB 0 H8P_MEMENTER: .DB 0 H8P_SPVAL: .DW 0 H8P_AFVAL: .DW 0 H8P_BCVAL: .DW 0 H8P_DEVAL: .DW 0 H8P_HLVAL: .DW 0 H8P_PCVAL: .DW 0 ; H8P_STATE: .DB 00 H8P_STTIMER: .DB 00 H8P_FPENA: .DB $FF H8P_SEGIDX: .DB 09 H8P_HBTICK: .DB 00 H8P_KEYBUF: .DB 00 H8P_LSTKEY: .DB 00 H8P_SEGBUF: .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF H8P_HORNDUR: .DW $0080 H8P_ONESEC: .DW 500 H8P_UPTIME: .DW 0 H8P_UPTDIG: .DB 0,0,0,0,0,0,0,0,0 ; ;-------------------------------------------------------------------------------------------------- ; HBIOS MODULE TRAILER ;-------------------------------------------------------------------------------------------------- ; END_H8P .EQU $ SIZ_H8P .EQU END_H8P - ORG_H8P ; MEMECHO "H8P occupies " MEMECHO SIZ_H8P MEMECHO " bytes.\n"