forked from MirrorRepos/RomWBW
68 changed files with 992 additions and 222 deletions
File diff suppressed because one or more lines are too long
@ -0,0 +1,109 @@ |
|||
; |
|||
;================================================================================================== |
|||
; ROMWBW 2.X CONFIGURATION FOR ZETA |
|||
;================================================================================================== |
|||
; |
|||
; BUILD CONFIGURATION OPTIONS |
|||
; |
|||
CPUOSC .EQU 20000 ; CPU OSC FREQ IN KHZ |
|||
; |
|||
BOOTCON .EQU CIODEV_UART ; CONSOLE DEVICE FOR BOOT MESSAGES (MUST BE PRIMARY SERIAL PORT FOR PLATFORM) |
|||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_CRT, CIODEV_PRPCON, CIODEV_PPPCON |
|||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) |
|||
CONBAUD .EQU 38400 ; BAUDRATE FOR CONSOLE DURING HARDWARE INIT |
|||
DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA DEVICE (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_N8V, VDADEV_UPD7220) |
|||
DEFEMU .EQU EMUTYP_TTY ; DEFAULT VDA EMULATION (EMUTYP_TTY, EMUTYP_ANSI, ...) |
|||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2 |
|||
; |
|||
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! |
|||
CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) |
|||
; |
|||
DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE) |
|||
; |
|||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER |
|||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER |
|||
; |
|||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) |
|||
UARTCNT .EQU 1 ; NUMBER OF UARTS |
|||
UART0IOB .EQU $68 ; UART0 IOBASE |
|||
UART0OSC .EQU 1843200 ; UART 0 OSC FREQUENCY |
|||
UART0BAUD .EQU CONBAUD ; UART0 BAUDRATE |
|||
UART0FIFO .EQU TRUE ; UART0 TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) |
|||
UART0AFC .EQU FALSE ; UART0 TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) |
|||
; |
|||
ASCIENABLE .EQU FALSE ; TRUE FOR Z180 ASCI SUPPORT |
|||
ASCI0BAUD .EQU CONBAUD ; ASCI0 BAUDRATE (IMPLEMENTED BY Z180_CNTLB0) |
|||
ASCI1BAUD .EQU CONBAUD ; ASCI1 BAUDRATE (IMPLEMENTED BY Z180_CNTLB1) |
|||
; |
|||
VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT |
|||
CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT |
|||
UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT |
|||
N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT |
|||
; |
|||
DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) |
|||
ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) |
|||
WRTCACHE .EQU TRUE ; ENABLE WRITE CACHING IN CBIOS (DE)BLOCKING ALGORITHM |
|||
DSKTRACE .EQU FALSE ; ENABLE TRACING OF CBIOS DISK FUNCTION CALLS |
|||
; |
|||
MDENABLE .EQU TRUE ; TRUE FOR ROM/RAM DISK SUPPORT (ALMOST ALWAYS WANT THIS ENABLED) |
|||
MDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF MDENABLE = TRUE) |
|||
; |
|||
FDENABLE .EQU TRUE ; TRUE FOR FLOPPY SUPPORT |
|||
FDMODE .EQU FDMODE_ZETA2 ; FDMODE_DIO, FDMODE_ZETA, FDMODE_DIDE, FDMODE_N8, FDMODE_DIO3 |
|||
FDTRACE .EQU 1 ; 0=SILENT, 1=FATAL ERRORS, 2=ALL ERRORS, 3=EVERYTHING (ONLY RELEVANT IF FDENABLE = TRUE) |
|||
FDMEDIA .EQU FDM144 ; FDM720, FDM144, FDM360, FDM120 (ONLY RELEVANT IF FDENABLE = TRUE) |
|||
FDMEDIAALT .EQU FDM720 ; ALTERNATE MEDIA TO TRY, SAME CHOICES AS ABOVE (ONLY RELEVANT IF FDMAUTO = TRUE) |
|||
FDMAUTO .EQU TRUE ; SELECT BETWEEN MEDIA OPTS ABOVE AUTOMATICALLY |
|||
; |
|||
RFENABLE .EQU FALSE ; TRUE FOR RAM FLOPPY SUPPORT |
|||
; |
|||
IDEENABLE .EQU FALSE ; TRUE FOR IDE SUPPORT |
|||
IDEMODE .EQU IDEMODE_DIO ; IDEMODE_DIO, IDEMODE_DIDE |
|||
IDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) |
|||
IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) |
|||
IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) |
|||
; |
|||
PPIDEENABLE .EQU TRUE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) |
|||
PPIDEIOB .EQU $60 ; PPIDE IOBASE |
|||
PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) |
|||
PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) |
|||
PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) |
|||
PPIDESLOW .EQU FALSE ; ADD DELAYS TO HELP PROBLEMATIC HARDWARE (TRY THIS IF PPIDE IS UNRELIABLE) |
|||
; |
|||
SDENABLE .EQU FALSE ; TRUE FOR SD SUPPORT |
|||
SDMODE .EQU SDMODE_PPI ; SDMODE_JUHA, SDMODE_CSIO, SDMODE_UART, SDMODE_PPI, SDMODE_DSD |
|||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) |
|||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) |
|||
SDCSIOFAST .EQU FALSE ; TABLE-DRIVEN BIT INVERTER |
|||
; |
|||
PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) |
|||
PRPIOB .EQU $A8 ; PORT IO ADDRESS BASE |
|||
PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) |
|||
PRPSDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PRPSDENABLE = TRUE) |
|||
PRPSDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) |
|||
PRPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO) |
|||
; |
|||
PPPENABLE .EQU FALSE ; TRUE FOR PARPORTPROP SUPPORT |
|||
PPPSDENABLE .EQU TRUE ; TRUE FOR PARPORTPROP SD SUPPORT |
|||
PPPSDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPPENABLE = TRUE) |
|||
PPPSDCAPACITY .EQU 64 ; CAPACITY OF PPP SD DEVICE (IN MB) |
|||
PPPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO) |
|||
; |
|||
HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT |
|||
HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) |
|||
HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) |
|||
; |
|||
PPKENABLE .EQU FALSE ; TRUE FOR PARALLEL PORT KEYBOARD |
|||
PPKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPKENABLE = TRUE) |
|||
KBDENABLE .EQU FALSE ; TRUE FOR PS/2 KEYBOARD ON I8242 |
|||
KBDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF KBDENABLE = TRUE) |
|||
; |
|||
TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT |
|||
ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT |
|||
ANSITRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF ANSIENABLE = TRUE) |
|||
; |
|||
BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) |
|||
BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE |
|||
BOOT_DEFAULT .EQU 'Z' ; SELECTION TO INVOKE AT TIMEOUT |
|||
; |
|||
#DEFINE AUTOCMD "" ; AUTO STARTUP COMMAND FOR CP/M |
|||
@ -0,0 +1,109 @@ |
|||
; |
|||
;================================================================================================== |
|||
; ROMWBW 2.X CONFIGURATION FOR ZETA |
|||
;================================================================================================== |
|||
; |
|||
; BUILD CONFIGURATION OPTIONS |
|||
; |
|||
CPUOSC .EQU 20000 ; CPU OSC FREQ IN KHZ |
|||
; |
|||
BOOTCON .EQU CIODEV_UART ; CONSOLE DEVICE FOR BOOT MESSAGES (MUST BE PRIMARY SERIAL PORT FOR PLATFORM) |
|||
DEFCON .EQU CIODEV_UART ; DEFAULT CONSOLE DEVICE (LOADER AND MONITOR): CIODEV_UART, CIODEV_CRT, CIODEV_PRPCON, CIODEV_PPPCON |
|||
ALTCON .EQU DEFCON ; ALT CONSOLE DEVICE (USED WHEN CONFIG JUMPER SHORTED) |
|||
CONBAUD .EQU 38400 ; BAUDRATE FOR CONSOLE DURING HARDWARE INIT |
|||
DEFVDA .EQU VDADEV_NONE ; DEFAULT VDA DEVICE (VDADEV_NONE, VDADEV_VDU, VDADEV_CVDU, VDADEV_N8V, VDADEV_UPD7220) |
|||
DEFEMU .EQU EMUTYP_TTY ; DEFAULT VDA EMULATION (EMUTYP_TTY, EMUTYP_ANSI, ...) |
|||
TERMTYPE .EQU TERM_ANSI ; TERM_TTY=0, TERM_ANSI=1, TERM_WYSE=2 |
|||
; |
|||
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!! |
|||
CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA) |
|||
; |
|||
DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE) |
|||
; |
|||
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER |
|||
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER |
|||
; |
|||
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE) |
|||
UARTCNT .EQU 1 ; NUMBER OF UARTS |
|||
UART0IOB .EQU $68 ; UART0 IOBASE |
|||
UART0OSC .EQU 1843200 ; UART 0 OSC FREQUENCY |
|||
UART0BAUD .EQU CONBAUD ; UART0 BAUDRATE |
|||
UART0FIFO .EQU TRUE ; UART0 TRUE ENABLES UART FIFO (16550 ASSUMED, N8VEM AND ZETA ONLY) |
|||
UART0AFC .EQU FALSE ; UART0 TRUE ENABLES AUTO FLOW CONTROL (YOUR TERMINAL/UART MUST SUPPORT RTS/CTS FLOW CONTROL!!!) |
|||
; |
|||
ASCIENABLE .EQU FALSE ; TRUE FOR Z180 ASCI SUPPORT |
|||
ASCI0BAUD .EQU CONBAUD ; ASCI0 BAUDRATE (IMPLEMENTED BY Z180_CNTLB0) |
|||
ASCI1BAUD .EQU CONBAUD ; ASCI1 BAUDRATE (IMPLEMENTED BY Z180_CNTLB1) |
|||
; |
|||
VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT |
|||
CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT |
|||
UPD7220ENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT |
|||
N8VENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT |
|||
; |
|||
DEFIOBYTE .EQU $00 ; DEFAULT INITIAL VALUE FOR CP/M IOBYTE, $00=TTY, $01=CRT (MUST HAVE CRT HARDWARE) |
|||
ALTIOBYTE .EQU DEFIOBYTE ; ALT INITIAL VALUE (USED WHEN CONFIG JUMPER SHORTED) |
|||
WRTCACHE .EQU TRUE ; ENABLE WRITE CACHING IN CBIOS (DE)BLOCKING ALGORITHM |
|||
DSKTRACE .EQU FALSE ; ENABLE TRACING OF CBIOS DISK FUNCTION CALLS |
|||
; |
|||
MDENABLE .EQU TRUE ; TRUE FOR ROM/RAM DISK SUPPORT (ALMOST ALWAYS WANT THIS ENABLED) |
|||
MDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF MDENABLE = TRUE) |
|||
; |
|||
FDENABLE .EQU TRUE ; TRUE FOR FLOPPY SUPPORT |
|||
FDMODE .EQU FDMODE_ZETA ; FDMODE_DIO, FDMODE_ZETA, FDMODE_DIDE, FDMODE_N8, FDMODE_DIO3 |
|||
FDTRACE .EQU 1 ; 0=SILENT, 1=FATAL ERRORS, 2=ALL ERRORS, 3=EVERYTHING (ONLY RELEVANT IF FDENABLE = TRUE) |
|||
FDMEDIA .EQU FDM144 ; FDM720, FDM144, FDM360, FDM120 (ONLY RELEVANT IF FDENABLE = TRUE) |
|||
FDMEDIAALT .EQU FDM720 ; ALTERNATE MEDIA TO TRY, SAME CHOICES AS ABOVE (ONLY RELEVANT IF FDMAUTO = TRUE) |
|||
FDMAUTO .EQU TRUE ; SELECT BETWEEN MEDIA OPTS ABOVE AUTOMATICALLY |
|||
; |
|||
RFENABLE .EQU FALSE ; TRUE FOR RAM FLOPPY SUPPORT |
|||
; |
|||
IDEENABLE .EQU FALSE ; TRUE FOR IDE SUPPORT |
|||
IDEMODE .EQU IDEMODE_DIO ; IDEMODE_DIO, IDEMODE_DIDE |
|||
IDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) |
|||
IDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) |
|||
IDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) |
|||
; |
|||
PPIDEENABLE .EQU TRUE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE) |
|||
PPIDEIOB .EQU $60 ; PPIDE IOBASE |
|||
PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE) |
|||
PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!) |
|||
PPIDECAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) |
|||
PPIDESLOW .EQU FALSE ; ADD DELAYS TO HELP PROBLEMATIC HARDWARE (TRY THIS IF PPIDE IS UNRELIABLE) |
|||
; |
|||
SDENABLE .EQU FALSE ; TRUE FOR SD SUPPORT |
|||
SDMODE .EQU SDMODE_PPI ; SDMODE_JUHA, SDMODE_CSIO, SDMODE_UART, SDMODE_PPI, SDMODE_DSD |
|||
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) |
|||
SDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) |
|||
SDCSIOFAST .EQU FALSE ; TABLE-DRIVEN BIT INVERTER |
|||
; |
|||
PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) |
|||
PRPIOB .EQU $A8 ; PORT IO ADDRESS BASE |
|||
PRPSDENABLE .EQU TRUE ; TRUE FOR PROPIO SD SUPPORT (FOR N8VEM PROPIO ONLY!) |
|||
PRPSDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PRPSDENABLE = TRUE) |
|||
PRPSDCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) |
|||
PRPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO) |
|||
; |
|||
PPPENABLE .EQU FALSE ; TRUE FOR PARPORTPROP SUPPORT |
|||
PPPSDENABLE .EQU TRUE ; TRUE FOR PARPORTPROP SD SUPPORT |
|||
PPPSDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPPENABLE = TRUE) |
|||
PPPSDCAPACITY .EQU 64 ; CAPACITY OF PPP SD DEVICE (IN MB) |
|||
PPPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO) |
|||
; |
|||
HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT |
|||
HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) |
|||
HDSKCAPACITY .EQU 64 ; CAPACITY OF DEVICE (IN MB) |
|||
; |
|||
PPKENABLE .EQU FALSE ; TRUE FOR PARALLEL PORT KEYBOARD |
|||
PPKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPKENABLE = TRUE) |
|||
KBDENABLE .EQU FALSE ; TRUE FOR PS/2 KEYBOARD ON I8242 |
|||
KBDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF KBDENABLE = TRUE) |
|||
; |
|||
TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT |
|||
ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT |
|||
ANSITRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF ANSIENABLE = TRUE) |
|||
; |
|||
BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) |
|||
BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE |
|||
BOOT_DEFAULT .EQU 'Z' ; SELECTION TO INVOKE AT TIMEOUT |
|||
; |
|||
#DEFINE AUTOCMD "" ; AUTO STARTUP COMMAND FOR CP/M |
|||
@ -0,0 +1,65 @@ |
|||
; |
|||
; MAKE A BCD NUMBER FROM A BINARY NUMBER |
|||
; 32 BIT BINARY NUMBER IN HL:BC, RESULT STORED AT (DE) |
|||
; DE IS PRESERVED, ALL OTHER REGS DESTROYED |
|||
; |
|||
BIN2BCD: |
|||
PUSH IX ; SAVE IX |
|||
PUSH BC ; MOVE BC |
|||
POP IX ; ... TO IX |
|||
LD C,32 ; LOOP FOR 32 BITS OF BINARY DWORD |
|||
; |
|||
BIN2BCD0: |
|||
; OUTER LOOP (ONCE FOR EACH BIT IN BINARY NUMBER) |
|||
LD B,5 ; LOOP FOR 5 BYTES OF RESULT |
|||
PUSH DE ; SAVE DE |
|||
ADD IX,IX ; LEFT SHIFT NEXT BIT FROM HL:IX |
|||
ADC HL,HL ; ... INTO CARRY |
|||
; |
|||
BIN2BCD1: |
|||
; INNER LOOP (ONCE FOR EACH BYTE OF BCD NUMBER) |
|||
LD A,(DE) ; GET IT |
|||
ADC A,A ; DOUBLE IT W/ CARRY |
|||
DAA ; DECIMAL ADJUST |
|||
LD (DE),A ; SAVE IT |
|||
INC DE ; POINT TO NEXT BCD BYTE |
|||
DJNZ BIN2BCD1 ; LOOP THRU ALL BCD BYTES |
|||
; |
|||
; REMAINDER OF OUTER LOOP |
|||
POP DE ; RECOVER DE |
|||
DEC C ; DEC BIT COUNTER |
|||
JR NZ,BIN2BCD0 ; LOOP TILL DONE WITH ALL BITS |
|||
POP IX ; RESTORE IX |
|||
RET |
|||
; |
|||
; PRINT CONTENTS OF 5 BYTE BCD NUMBER AT (HL) |
|||
; WITH LEADING ZERO SUPPRESSION |
|||
; ALL REGS DESTROYED |
|||
; |
|||
PRTBCD: |
|||
INC HL ; BUMP HL TO POINT TO |
|||
INC HL ; ... |
|||
INC HL ; ... |
|||
INC HL ; ... LAST BYTE OF BCD |
|||
LD B,5 ; LOOP FOR 5 BYTES |
|||
LD C,0 ; START BY SUPPRESSING LEADING ZEROES |
|||
; |
|||
PRTBCD1: |
|||
; LOOP TO PRINT ONE BCD BYTE (TWO DIGITS) |
|||
XOR A ; CLEAR ACCUM |
|||
RLD ; ROTATE FIRST NIBBLE INTO A |
|||
CALL PRTBCD2 ; PRINT IT |
|||
XOR A ; CLEAR ACCUM |
|||
RLD ; ROTATE SECOND NIBBLE INTO A |
|||
CALL PRTBCD2 ; PRINT IT |
|||
DEC HL ; POINT TO PRIOR BYTE |
|||
DJNZ PRTBCD1 ; LOOP TILL DONE |
|||
RET ; RETURN |
|||
; |
|||
PRTBCD2: |
|||
; SUBROUTINE TO PRINT A DIGIT IN A |
|||
CP C ; COMPARE INCOMING TO C |
|||
RET Z ; IF EQUAL, SUPPRESSING, ABORT |
|||
DEC C ; MAKE C NEGATIVE TO STOP SUPPRESSION |
|||
ADD A,'0' ; OFFSET TO PRINTABLE VALUE |
|||
JP COUT ; EXIT VIA CHARACTER OUT |
|||
@ -1,7 +1,5 @@ |
|||
#DEFINE RMJ 2 |
|||
#DEFINE RMN 7 |
|||
#DEFINE RUP 1 |
|||
#DEFINE RUP 0 |
|||
#DEFINE RTP 0 |
|||
#DEFINE BIOSVER "2.7.1" |
|||
#DEFINE BIOSBLD "Build 1 Developmental" |
|||
#DEFINE REVISION 500 |
|||
#DEFINE BIOSVER "2.7.0" |
|||
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue