|
|
@ -3,74 +3,38 @@ |
|
|
; ASCI DRIVER (Z180 SERIAL PORTS) |
|
|
; ASCI DRIVER (Z180 SERIAL PORTS) |
|
|
;================================================================================================== |
|
|
;================================================================================================== |
|
|
; |
|
|
; |
|
|
; BAUD RATE PROGRAMMING: |
|
|
|
|
|
; Given a known clock speed (PHI) and target Baud Rate (BAUD): |
|
|
|
|
|
; |
|
|
|
|
|
; Divisor = PHI / BAUD |
|
|
|
|
|
; |
|
|
|
|
|
; Program PS, DR, SS bits based on divisor table lookup |
|
|
|
|
|
; |
|
|
|
|
|
; Divisor = PHI / BAUD |
|
|
|
|
|
; Lookup = PHI / BAUD / 160 |
|
|
|
|
|
; |
|
|
|
|
|
; To allow easier computation: |
|
|
|
|
|
; |
|
|
|
|
|
; Let xPHI = PHI / 1000 (PHI is always divisible by 1000) |
|
|
|
|
|
; Let xBAUD = BAUD / 100 (BAUD is always divisible by 100) |
|
|
|
|
|
; xPHI will always fit in 2 byte int |
|
|
|
|
|
; xBAUD will always fit in 2 byte int |
|
|
|
|
|
; |
|
|
|
|
|
; Lookup = (xPHI >> 4) / xBAUD |
|
|
|
|
|
; |
|
|
|
|
|
; If failure to match, fallback to 9600 baud and try again |
|
|
|
|
|
; |
|
|
|
|
|
; Lookup PS Bit PS Div DR Bit DR Div SS Bits SS Div Divisor CNTLB |
|
|
|
|
|
; 1 0 10 0 16 0 1 160 XX0X0000 |
|
|
|
|
|
; 2 0 10 0 16 1 2 320 XX0X0001 |
|
|
|
|
|
; 3 1 30 0 16 0 1 480 XX1X0000 |
|
|
|
|
|
; 4 0 10 0 16 2 4 640 XX0X0010 |
|
|
|
|
|
; 6 1 30 0 16 1 2 960 XX1X0001 |
|
|
|
|
|
; 8 0 10 0 16 3 8 1280 XX0X0011 |
|
|
|
|
|
; 12 1 30 0 16 2 4 1920 XX1X0010 |
|
|
|
|
|
; 16 0 10 0 16 4 16 2560 XX0X0100 |
|
|
|
|
|
; 24 1 30 0 16 3 8 3840 XX1X0011 |
|
|
|
|
|
; 32 0 10 0 16 5 32 5120 XX0X0101 |
|
|
|
|
|
; 48 1 30 0 16 4 16 7680 XX1X0100 |
|
|
|
|
|
; 64 0 10 0 16 6 64 10240 XX0X0110 |
|
|
|
|
|
; 96 1 30 0 16 5 32 15360 XX1X0101 |
|
|
|
|
|
; 128 0 10 1 64 5 32 20480 XX0X1101 |
|
|
|
|
|
; 192 1 30 0 16 6 64 30720 XX1X0110 |
|
|
|
|
|
; 256 0 10 1 64 6 64 40960 XX0X1110 |
|
|
|
|
|
; 384 1 30 1 64 5 32 61440 XX1X1101 |
|
|
|
|
|
; 768 1 30 1 64 6 64 122880 XX1X1110 |
|
|
|
|
|
; |
|
|
|
|
|
ASCI_LKUP: |
|
|
|
|
|
; LOOKUP CNTLB VAL |
|
|
|
|
|
; ------ ---------- |
|
|
|
|
|
.DW 1 \ .DB %00000000 |
|
|
|
|
|
.DW 2 \ .DB %00000001 |
|
|
|
|
|
.DW 3 \ .DB %00100000 |
|
|
|
|
|
.DW 4 \ .DB %00000010 |
|
|
|
|
|
.DW 6 \ .DB %00100001 |
|
|
|
|
|
.DW 8 \ .DB %00000011 |
|
|
|
|
|
.DW 12 \ .DB %00100010 |
|
|
|
|
|
.DW 16 \ .DB %00000100 |
|
|
|
|
|
.DW 24 \ .DB %00100011 |
|
|
|
|
|
.DW 32 \ .DB %00000101 |
|
|
|
|
|
.DW 48 \ .DB %00100100 |
|
|
|
|
|
.DW 64 \ .DB %00000110 |
|
|
|
|
|
.DW 96 \ .DB %00100101 |
|
|
|
|
|
.DW 128 \ .DB %00001101 |
|
|
|
|
|
.DW 192 \ .DB %00100110 |
|
|
|
|
|
.DW 256 \ .DB %00001110 |
|
|
|
|
|
.DW 384 \ .DB %00101101 |
|
|
|
|
|
.DW 768 \ .DB %00101110 |
|
|
|
|
|
; |
|
|
|
|
|
ASCI_LKUPCNT .EQU ($ - ASCI_LKUP) / 3 |
|
|
|
|
|
; |
|
|
|
|
|
; CNTLB0/1: |
|
|
|
|
|
|
|
|
; STAT: |
|
|
|
|
|
; 7 6 5 4 3 2 1 0 |
|
|
|
|
|
; R O P F R C T T |
|
|
|
|
|
; 0 0 0 0 0 0 0 0 DEFAULT VALUES |
|
|
|
|
|
; | | | | | | | | |
|
|
|
|
|
; | | | | | | | +-- TIE: TRANSMIT INTERRUPT ENABLE |
|
|
|
|
|
; | | | | | | +---- TDRE: TRANSMIT DATA REGISTER EMPTY |
|
|
|
|
|
; | | | | | +------ DCD0/CTS1E: CH0 CARRIER DETECT, CH1 CTS ENABLE |
|
|
|
|
|
; | | | | +-------- RIE: RECEIVE INTERRUPT ENABLE |
|
|
|
|
|
; | | | +---------- FE: FRAMING ERROR |
|
|
|
|
|
; | | +------------ PE: PARITY ERROR |
|
|
|
|
|
; | +-------------- OVRN: OVERRUN ERROR |
|
|
|
|
|
; +---------------- RDRF: RECEIVE DATA REGISTER FULL |
|
|
|
|
|
; |
|
|
|
|
|
; CNTLA: |
|
|
|
|
|
; 7 6 5 4 3 2 1 0 |
|
|
|
|
|
; M R T R E M M M |
|
|
|
|
|
; 0 1 1 0 0 1 0 0 DEFAULT VALUES |
|
|
|
|
|
; | | | | | | | | |
|
|
|
|
|
; | | | | | | | +-- MOD0: STOP BITS: 0=1 BIT, 1=2 BITS |
|
|
|
|
|
; | | | | | | +---- MOD1: PARITY: 0=NONE, 1=ENABLED |
|
|
|
|
|
; | | | | | +------ MOD2: DATA BITS: 0=7 BITS, 1=8 BITS |
|
|
|
|
|
; | | | | +-------- MPBR/EFR: MULTIPROCESSOR BIT RECEIVE / ERROR FLAG RESET |
|
|
|
|
|
; | | | +---------- RTS0/CKA1D: CH0 RTS, CH1 CLOCK DISABLE |
|
|
|
|
|
; | | +------------ TE: TRANSMITTER ENABLE |
|
|
|
|
|
; | +-------------- RE: RECEIVER ENABLE |
|
|
|
|
|
; +---------------- MPE: MULTI-PROCESSOR MODE ENABLE |
|
|
|
|
|
; |
|
|
|
|
|
; CNTLB: |
|
|
; 7 6 5 4 3 2 1 0 |
|
|
; 7 6 5 4 3 2 1 0 |
|
|
; T M P R D S S S |
|
|
; T M P R D S S S |
|
|
|
|
|
; 0 0 X 0 X X X X DEFAULT VALUES |
|
|
; | | | | | | | | |
|
|
; | | | | | | | | |
|
|
; | | | | | + + +-- SS: SOURCE/SPEED SELECT (R/W) |
|
|
; | | | | | + + +-- SS: SOURCE/SPEED SELECT (R/W) |
|
|
; | | | | +-------- DR: DIVIDE RATIO (R/W) |
|
|
; | | | | +-------- DR: DIVIDE RATIO (R/W) |
|
|
@ -79,25 +43,35 @@ ASCI_LKUPCNT .EQU ($ - ASCI_LKUP) / 3 |
|
|
; | +-------------- MP: MULTIPROCESSOR MODE (R/W) |
|
|
; | +-------------- MP: MULTIPROCESSOR MODE (R/W) |
|
|
; +---------------- MPBT: MULTIPROCESSOR BIT TRANSMIT (R/W) |
|
|
; +---------------- MPBT: MULTIPROCESSOR BIT TRANSMIT (R/W) |
|
|
; |
|
|
; |
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
; ASEXT: |
|
|
|
|
|
; 7 6 5 4 3 2 1 0 |
|
|
|
|
|
; R D C X B F D S |
|
|
|
|
|
; 0 1 1 0 0 1 1 0 DEFAULT VALUES |
|
|
|
|
|
; | | | | | | | | |
|
|
|
|
|
; | | | | | | | +-- SEND BREAK |
|
|
|
|
|
; | | | | | | +---- BREAK DETECT (RO) |
|
|
|
|
|
; | | | | | +------ BREAK FEATURE ENABLE |
|
|
|
|
|
; | | | | +-------- BRG MODE |
|
|
|
|
|
; | | | +---------- X1 BIT CLK ASCI |
|
|
|
|
|
; | | +------------ CTS0 DISABLE |
|
|
|
|
|
; | +-------------- DCD0 DISABLE |
|
|
|
|
|
; +---------------- RDRF INT INHIBIT |
|
|
; |
|
|
; |
|
|
ASCI_INIT: |
|
|
ASCI_INIT: |
|
|
; |
|
|
; |
|
|
; SETUP THE DISPATCH TABLE ENTRIES |
|
|
; SETUP THE DISPATCH TABLE ENTRIES |
|
|
; |
|
|
; |
|
|
LD B,2 ; ALWAYS 2 ASCI UNITS ON Z180 |
|
|
|
|
|
LD C,0 ; PHYSICAL UNIT INDEX |
|
|
|
|
|
ASCI_INIT0: |
|
|
|
|
|
PUSH BC ; SAVE LOOP CONTROL |
|
|
|
|
|
LD D,C ; PHYSICAL UNIT |
|
|
|
|
|
LD E,CIODEV_ASCI ; DEVICE TYPE |
|
|
|
|
|
|
|
|
LD B,2 ; ALWAYS 2 ASCI UNITS ON Z180 |
|
|
|
|
|
LD C,0 ; PHYSICAL UNIT INDEX |
|
|
|
|
|
ASCI_INIT1: |
|
|
|
|
|
PUSH BC ; SAVE LOOP CONTROL |
|
|
|
|
|
LD D,C ; PHYSICAL UNIT |
|
|
|
|
|
LD E,CIODEV_ASCI ; DEVICE TYPE |
|
|
LD BC,ASCI_DISPATCH ; BC := DISPATCH ADDRESS |
|
|
LD BC,ASCI_DISPATCH ; BC := DISPATCH ADDRESS |
|
|
CALL CIO_ADDENT ; ADD ENTRY, BC IS NOT DESTROYED |
|
|
|
|
|
POP BC ; RESTORE LOOP CONTROL |
|
|
|
|
|
INC C ; NEXT PHYSICAL UNIT |
|
|
|
|
|
DJNZ ASCI_INIT0 ; LOOP UNTIL DONE |
|
|
|
|
|
|
|
|
CALL CIO_ADDENT ; ADD ENTRY, BC IS NOT DESTROYED |
|
|
|
|
|
POP BC ; RESTORE LOOP CONTROL |
|
|
|
|
|
INC C ; NEXT PHYSICAL UNIT |
|
|
|
|
|
DJNZ ASCI_INIT1 ; LOOP UNTIL DONE |
|
|
; |
|
|
; |
|
|
; ASCI0 |
|
|
; ASCI0 |
|
|
CALL NEWLINE ; FORMATTING |
|
|
CALL NEWLINE ; FORMATTING |
|
|
@ -108,23 +82,31 @@ ASCI_INIT0: |
|
|
CALL PC_COMMA |
|
|
CALL PC_COMMA |
|
|
LD A,Z180_RDR0 |
|
|
LD A,Z180_RDR0 |
|
|
CALL PRTHEXBYTE |
|
|
CALL PRTHEXBYTE |
|
|
PRTS(" BAUD=$") |
|
|
|
|
|
|
|
|
|
|
|
LD DE,ASCI0BAUD >> 16 ; SET DE:HL TO |
|
|
|
|
|
LD HL,ASCI0BAUD & $FFFF ; ... BAUD RATE |
|
|
|
|
|
LD BC,HB_BCDTMP ; POINT TO TEMP BCD |
|
|
|
|
|
CALL BIN2BCD ; CONVERT TO BCD |
|
|
|
|
|
CALL PRTBCD ; AND PRINT IT |
|
|
|
|
|
|
|
|
CALL PC_SPACE ; FORMATTING |
|
|
|
|
|
LD DE,ASCI0CFG ; LOAD CONFIG |
|
|
|
|
|
CALL PS_PRTSC0 ; PRINT IT |
|
|
|
|
|
|
|
|
|
|
|
LD HL,ASCI0CFG ; SERIAL CONFIG WORD |
|
|
|
|
|
LD A,H ; BYTE W/ ENCODED BAUD RATE |
|
|
|
|
|
AND $1F ; ISOLATE BITS |
|
|
|
|
|
LD L,A ; MOVE TO L |
|
|
|
|
|
LD H,0 ; CLEAR MSB |
|
|
|
|
|
CALL ASCI_CNTLB ; DERIVE CNTLB VALUE |
|
|
|
|
|
;CALL TSTPT |
|
|
|
|
|
JR Z,ASCI_INIT2 ; IMPLEMENT IF NO ERROR |
|
|
|
|
|
PRTS(" ERROR!$") |
|
|
|
|
|
JR ASCI_INIT3 ; DO NEXT UNIT |
|
|
|
|
|
|
|
|
#IF (PLATFORM != PLT_MK4) |
|
|
|
|
|
|
|
|
ASCI_INIT2: |
|
|
LD A,66H |
|
|
LD A,66H |
|
|
OUT0 (Z180_ASEXT0),A |
|
|
OUT0 (Z180_ASEXT0),A |
|
|
LD A,64H |
|
|
LD A,64H |
|
|
OUT0 (Z180_CNTLA0),A |
|
|
OUT0 (Z180_CNTLA0),A |
|
|
LD A,Z180_ASCIB0 |
|
|
|
|
|
|
|
|
LD A,C |
|
|
OUT0 (Z180_CNTLB0),A |
|
|
OUT0 (Z180_CNTLB0),A |
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ASCI_INIT3: |
|
|
; ASCI1 |
|
|
; ASCI1 |
|
|
CALL NEWLINE ; FORMATTING |
|
|
CALL NEWLINE ; FORMATTING |
|
|
PRTS("ASCI1: IO=0x$") |
|
|
PRTS("ASCI1: IO=0x$") |
|
|
@ -133,22 +115,32 @@ ASCI_INIT0: |
|
|
CALL PC_COMMA |
|
|
CALL PC_COMMA |
|
|
LD A,Z180_RDR1 |
|
|
LD A,Z180_RDR1 |
|
|
CALL PRTHEXBYTE |
|
|
CALL PRTHEXBYTE |
|
|
PRTS(" BAUD=$") |
|
|
|
|
|
LD DE,ASCI0BAUD >> 16 ; SET DE:HL TO |
|
|
|
|
|
LD HL,ASCI0BAUD & $FFFF ; ... BAUD RATE |
|
|
|
|
|
LD BC,HB_BCDTMP ; POINT TO TEMP BCD |
|
|
|
|
|
CALL BIN2BCD ; CONVERT TO BCD |
|
|
|
|
|
CALL PRTBCD ; AND PRINT IT |
|
|
|
|
|
|
|
|
|
|
|
#IF (PLATFORM != PLT_MK4) |
|
|
|
|
|
|
|
|
CALL PC_SPACE ; FORMATTING |
|
|
|
|
|
LD DE,ASCI1CFG ; LOAD CONFIG |
|
|
|
|
|
CALL PS_PRTSC0 ; PRINT IT |
|
|
|
|
|
|
|
|
|
|
|
LD HL,ASCI1CFG ; SERIAL CONFIG WORD |
|
|
|
|
|
LD A,H ; BYTE W/ ENCODED BAUD RATE |
|
|
|
|
|
AND $1F ; ISOLATE BITS |
|
|
|
|
|
LD L,A ; MOVE TO L |
|
|
|
|
|
LD H,0 ; CLEAR MSB |
|
|
|
|
|
CALL ASCI_CNTLB ; DERIVE CNTLB VALUE |
|
|
|
|
|
;CALL TSTPT |
|
|
|
|
|
JR Z,ASCI_INIT4 ; IMPLEMENT IF NO ERROR |
|
|
|
|
|
PRTS(" ERROR!$") |
|
|
|
|
|
JR ASCI_INIT5 ; DO NEXT UNIT |
|
|
|
|
|
|
|
|
|
|
|
ASCI_INIT4: |
|
|
LD A,66H |
|
|
LD A,66H |
|
|
OUT0 (Z180_ASEXT1),A |
|
|
OUT0 (Z180_ASEXT1),A |
|
|
LD A,64H |
|
|
LD A,64H |
|
|
OUT0 (Z180_CNTLA1),A |
|
|
OUT0 (Z180_CNTLA1),A |
|
|
LD A,Z180_ASCIB1 |
|
|
|
|
|
|
|
|
LD A,C |
|
|
OUT0 (Z180_CNTLB1),A |
|
|
OUT0 (Z180_CNTLB1),A |
|
|
#ENDIF |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ASCI_INIT5: |
|
|
|
|
|
XOR A |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
; CHARACTER DEVICE DRIVER ENTRY |
|
|
; CHARACTER DEVICE DRIVER ENTRY |
|
|
@ -238,8 +230,9 @@ ASCI0_INITDEV: |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
ASCI0_QUERY: |
|
|
ASCI0_QUERY: |
|
|
LD DE,ASCI0BAUD >> 16 |
|
|
|
|
|
LD HL,ASCI0BAUD & $FFFF |
|
|
|
|
|
|
|
|
LD DE,ASCI0CFG |
|
|
|
|
|
;LD DE,ASCI0BAUD >> 16 |
|
|
|
|
|
;LD HL,ASCI0BAUD & $FFFF |
|
|
XOR A |
|
|
XOR A |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
@ -330,8 +323,9 @@ ASCI1_INITDEV: |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
ASCI1_QUERY: |
|
|
ASCI1_QUERY: |
|
|
LD DE,ASCI1BAUD >> 16 |
|
|
|
|
|
LD HL,ASCI1BAUD & $FFFF |
|
|
|
|
|
|
|
|
;LD DE,ASCI1BAUD >> 16 |
|
|
|
|
|
;LD HL,ASCI1BAUD & $FFFF |
|
|
|
|
|
LD DE,ASCI1CFG |
|
|
XOR A |
|
|
XOR A |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
@ -342,3 +336,100 @@ ASCI1_DEVICE: |
|
|
LD E,1 ; E := PHYSICAL UNIT |
|
|
LD E,1 ; E := PHYSICAL UNIT |
|
|
XOR A ; SIGNAL SUCCESS |
|
|
XOR A ; SIGNAL SUCCESS |
|
|
RET |
|
|
RET |
|
|
|
|
|
; |
|
|
|
|
|
; DERIVE A CNTLB VALUE BASED ON AN ENCODED BAUD RATE AND CURRENT CPU SPEED |
|
|
|
|
|
; ENTRY: HL = ENCODED BAUD RATE |
|
|
|
|
|
; EXIT: C = CNTLB VALUE, A=0, Z SET INDICATES SUCCESS |
|
|
|
|
|
; |
|
|
|
|
|
; GIVEN DIVISOR = CLK HZ / BAUD |
|
|
|
|
|
; LET LOOKUP = DIVISOR / 160 |
|
|
|
|
|
; LOOKUP = CLK / BAUD / 160 |
|
|
|
|
|
; LET KCLK = CLK / 1000, SO CLK = KCLK * 1000 |
|
|
|
|
|
; LOOKUP = KCLK * 1000 / BAUD / 160 |
|
|
|
|
|
; OR, LOOKUP = (KCLK / 12) / (BAUD / 75) |
|
|
|
|
|
; |
|
|
|
|
|
; SO, WE USE (CPUKHZ / 12) / (BAUD RATE / 75) TO GET LOOKUP VALUE |
|
|
|
|
|
; THEN LOOKUP THE CORRECT CNTLB0 VALUE |
|
|
|
|
|
; |
|
|
|
|
|
ASCI_CNTLB: |
|
|
|
|
|
LD DE,1 ; USE DECODE CONSTANT OF 1 TO GET BAUD RATE ALREADY DIVIDED BY 75 |
|
|
|
|
|
CALL DECODE ; DECODE THE BAUDATE INTO DE:HL, DE IS DISCARDED |
|
|
|
|
|
RET NZ ; ABORT ON ERROR |
|
|
|
|
|
PUSH HL ; HL HAS (BAUD / 75), SAVE IT |
|
|
|
|
|
;LD HL,(HCB + HCB_CPUKHZ) ; GET CPU CLK IN KHZ |
|
|
|
|
|
LD HL,CPUKHZ ; CPU CLK IN KHZ |
|
|
|
|
|
LD DE,12 ; PREPARE TO DIVIDE BY 12 |
|
|
|
|
|
CALL DIV16 ; BC := (CPU CLK KHZ / 12), REMAINDER IN HL, ZF |
|
|
|
|
|
POP DE ; RESTORE DENOMINATOR |
|
|
|
|
|
JR NZ,ASCI_CNTLB2 ; ABORT IF REMAINDER |
|
|
|
|
|
PUSH BC ; MOVE VALUE |
|
|
|
|
|
POP HL ; ... TO HL NUMERATOR |
|
|
|
|
|
CALL DIV16 ; BC := LOOKUP VALUE, REMAINDER IN HL, ZF |
|
|
|
|
|
JR NZ,ASCI_CNTLB2 ; ABORT IF REMAINDER |
|
|
|
|
|
PUSH BC ; MOVE LOOKUP VALUE |
|
|
|
|
|
POP DE ; TO DE |
|
|
|
|
|
LD B,ASCI_LKUPCNT ; INIT LOOP COUNT |
|
|
|
|
|
LD HL,ASCI_LKUP ; POINT TO START OF TABLE |
|
|
|
|
|
ASCI_CNTLB0: |
|
|
|
|
|
LD A,(HL) ; GET BYTE TO COMPARE |
|
|
|
|
|
INC HL ; INCREMENT HL FOR NEXT |
|
|
|
|
|
CP E ; COMPARE LSB |
|
|
|
|
|
JR NZ,ASCI_CNTLB1 ; NO MATCH, LOOP |
|
|
|
|
|
LD A,(HL) ; GET BYTE TO COMPARE |
|
|
|
|
|
CP D ; COMPARE MSB |
|
|
|
|
|
JR NZ,ASCI_CNTLB1 ; NO MATCH, LOOP |
|
|
|
|
|
; MATCH FOUND |
|
|
|
|
|
INC HL ; POINT TO CNTLB VALUE |
|
|
|
|
|
LD C,(HL) ; LOAD IN C |
|
|
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
|
|
RET ; AND DONE |
|
|
|
|
|
ASCI_CNTLB1: |
|
|
|
|
|
INC HL ; BUMP TO |
|
|
|
|
|
INC HL ; ... NEXT ENTRY |
|
|
|
|
|
DJNZ ASCI_CNTLB0 ; LOOP IF MORE TO CHECK |
|
|
|
|
|
ASCI_CNTLB2: |
|
|
|
|
|
OR $FF ; NOT FOUND, SET ERROR |
|
|
|
|
|
RET ; AND RETURN |
|
|
|
|
|
; |
|
|
|
|
|
; LOOKUP PS BIT PS DIV DR BIT DR DIV SS BITS SS DIV DIVISOR CNTLB |
|
|
|
|
|
; ------ ------ ------ ------ ------ ------- ------ ------- -------- |
|
|
|
|
|
; 1 0 10 0 16 0 1 160 XX0X0000 |
|
|
|
|
|
; 2 0 10 0 16 1 2 320 XX0X0001 |
|
|
|
|
|
; 3 1 30 0 16 0 1 480 XX1X0000 |
|
|
|
|
|
; 4 0 10 0 16 2 4 640 XX0X0010 |
|
|
|
|
|
; 6 1 30 0 16 1 2 960 XX1X0001 |
|
|
|
|
|
; 8 0 10 0 16 3 8 1280 XX0X0011 |
|
|
|
|
|
; 12 1 30 0 16 2 4 1920 XX1X0010 |
|
|
|
|
|
; 16 0 10 0 16 4 16 2560 XX0X0100 |
|
|
|
|
|
; 24 1 30 0 16 3 8 3840 XX1X0011 |
|
|
|
|
|
; 32 0 10 0 16 5 32 5120 XX0X0101 |
|
|
|
|
|
; 48 1 30 0 16 4 16 7680 XX1X0100 |
|
|
|
|
|
; 64 0 10 0 16 6 64 10240 XX0X0110 |
|
|
|
|
|
; 96 1 30 0 16 5 32 15360 XX1X0101 |
|
|
|
|
|
; 128 0 10 1 64 5 32 20480 XX0X1101 |
|
|
|
|
|
; 192 1 30 0 16 6 64 30720 XX1X0110 |
|
|
|
|
|
; 256 0 10 1 64 6 64 40960 XX0X1110 |
|
|
|
|
|
; 384 1 30 1 64 5 32 61440 XX1X1101 |
|
|
|
|
|
; 768 1 30 1 64 6 64 122880 XX1X1110 |
|
|
|
|
|
; |
|
|
|
|
|
ASCI_LKUP: ; LOOKUP CNTLB VAL |
|
|
|
|
|
.DW 1 \ .DB %00000000 |
|
|
|
|
|
.DW 2 \ .DB %00000001 |
|
|
|
|
|
.DW 3 \ .DB %00100000 |
|
|
|
|
|
.DW 4 \ .DB %00000010 |
|
|
|
|
|
.DW 6 \ .DB %00100001 |
|
|
|
|
|
.DW 8 \ .DB %00000011 |
|
|
|
|
|
.DW 12 \ .DB %00100010 |
|
|
|
|
|
.DW 16 \ .DB %00000100 |
|
|
|
|
|
.DW 24 \ .DB %00100011 |
|
|
|
|
|
.DW 32 \ .DB %00000101 |
|
|
|
|
|
.DW 48 \ .DB %00100100 |
|
|
|
|
|
.DW 64 \ .DB %00000110 |
|
|
|
|
|
.DW 96 \ .DB %00100101 |
|
|
|
|
|
.DW 128 \ .DB %00001101 |
|
|
|
|
|
.DW 192 \ .DB %00100110 |
|
|
|
|
|
.DW 256 \ .DB %00001110 |
|
|
|
|
|
.DW 384 \ .DB %00101101 |
|
|
|
|
|
.DW 768 \ .DB %00101110 |
|
|
|
|
|
; |
|
|
|
|
|
ASCI_LKUPCNT .EQU ($ - ASCI_LKUP) / 3 |