mirror of https://github.com/wwarthen/RomWBW.git
committed by
GitHub
45 changed files with 4259 additions and 138 deletions
@ -0,0 +1,19 @@ |
|||||
|
; test program for user button on Z80 MBC clock board |
||||
|
; by Andrew Lynch, 6 Jul 2021 |
||||
|
|
||||
|
|
||||
|
ORG 00100H |
||||
|
|
||||
|
MAIN_LOOP: |
||||
|
|
||||
|
IN A,($70) ; READ USER BUTTON STATUS |
||||
|
AND %01000000 ; REMOVE ALL EXCEPT USER BUTTON (D6) |
||||
|
; 0=PRESSED, 1=NOT PRESSED |
||||
|
JR NZ,MAIN_LOOP ; IF NOT PRESSED TRY AGAIN |
||||
|
|
||||
|
LD A,%00000011 ; TURN ON BOTH USER LEDS |
||||
|
OUT ($70),A ; |
||||
|
|
||||
|
RET |
||||
|
|
||||
|
end |
||||
@ -0,0 +1,8 @@ |
|||||
|
; program to test user LEDs on Z80 MBC clock board |
||||
|
; by Andrew Lynch, 6 Jul 2021 |
||||
|
|
||||
|
org $0100 |
||||
|
LD A,%00000011 |
||||
|
OUT ($70),A ; turn on USERLED0 and USERLED1 |
||||
|
RET |
||||
|
end |
||||
@ -0,0 +1,35 @@ |
|||||
|
; program to test user buzzer/speaker on Z80 MBC clock board |
||||
|
; by Andrew Lynch, 6 Jul 2021 |
||||
|
|
||||
|
org $0100 |
||||
|
|
||||
|
LD HL,$7FFF ; INITIALIZE OUTER LOOP |
||||
|
LD DE,$0001 ; DECREMENT VALUE |
||||
|
|
||||
|
START: |
||||
|
|
||||
|
LD A,%00000100 |
||||
|
OUT ($70),A ; TURN ON SPEAKER |
||||
|
|
||||
|
LD B,$80 ; HOLD SPEAKER ON FOR 128 COUNTS |
||||
|
LOOP1: DJNZ LOOP1 |
||||
|
|
||||
|
LD A,%00000000 |
||||
|
OUT ($70),A ; TURN OFF SPEAKER |
||||
|
|
||||
|
LD B,$80 ; HOLD SPEAKER OFF FOR 128 COUNTS |
||||
|
LOOP2: DJNZ LOOP2 |
||||
|
|
||||
|
SBC HL,DE ; REDUCE OUTER LOOP BY 1 |
||||
|
|
||||
|
JR NZ,START ; LOOP 32768 TIMES, ABOUT 15 SECONDS |
||||
|
|
||||
|
LD A,%00000011 |
||||
|
OUT ($70),A ; TURN ON BOTH USER LEDS |
||||
|
|
||||
|
; HALT ; HALT & TURN ON HALT LED |
||||
|
|
||||
|
RET |
||||
|
|
||||
|
end |
||||
|
|
||||
File diff suppressed because it is too large
@ -0,0 +1,703 @@ |
|||||
|
;================================================================================================== |
||||
|
; PCF8584 I2C Clock Driver |
||||
|
;================================================================================================== |
||||
|
; |
||||
|
PCF_BASE .EQU 0F0H |
||||
|
PCF_ID .EQU 0AAH |
||||
|
CPU_CLK .EQU 12 |
||||
|
|
||||
|
REGS0 .EQU PCF_BASE |
||||
|
REGS1 .EQU REGS0+1 |
||||
|
PCF_OWN .EQU (PCF_ID >> 1) ; PCF'S ADDRESS IN SLAVE MODE |
||||
|
; |
||||
|
;T4LC512D .EQU 10100000B ; DEVICE IDENTIFIER |
||||
|
;T4LC512A1 .EQU 00000000B ; DEVICE ADDRESS |
||||
|
;T4LC512A2 .EQU 00001110B ; DEVICE ADDRESS |
||||
|
;T4LC512A3 .EQU 00000010B ; DEVICE ADDRESS |
||||
|
;T4LC512W .EQU 00000000B ; DEVICE WRITE |
||||
|
;T4LC512R .EQU 00000001B ; DEVICE READ |
||||
|
; |
||||
|
;I2CDEV1W .EQU (T4LC512D+T4LC512A1+T4LC512W) |
||||
|
;I2CDEV1R .EQU (T4LC512D+T4LC512A1+T4LC512R) |
||||
|
; |
||||
|
;I2CDEV2W .EQU (T4LC512D+T4LC512A2+T4LC512W) |
||||
|
;I2CDEV2R .EQU (T4LC512D+T4LC512A2+T4LC512R) |
||||
|
; |
||||
|
;I2CDEV3W .EQU (T4LC512D+T4LC512A3+T4LC512W) |
||||
|
;I2CDEV3R .EQU (T4LC512D+T4LC512A3+T4LC512R) |
||||
|
; |
||||
|
; CONTROL REGISTER BITS |
||||
|
; |
||||
|
PCF_PIN .EQU 10000000B |
||||
|
PCF_ES0 .EQU 01000000B |
||||
|
PCF_ES1 .EQU 00100000B |
||||
|
PCF_ES2 .EQU 00010000B |
||||
|
PCF_EN1 .EQU 00001000B |
||||
|
PCF_STA .EQU 00000100B |
||||
|
PCF_STO .EQU 00000010B |
||||
|
PCF_ACK .EQU 00000001B |
||||
|
; |
||||
|
PCF_START_ .EQU (PCF_PIN | PCF_ES0 | PCF_STA | PCF_ACK) |
||||
|
PCF_STOP_ .EQU (PCF_PIN | PCF_ES0 | PCF_STO | PCF_ACK) |
||||
|
PCF_REPSTART_ .EQU ( PCF_ES0 | PCF_STA | PCF_ACK) |
||||
|
PCF_IDLE_ .EQU (PCF_PIN | PCF_ES0 | PCF_ACK) |
||||
|
; |
||||
|
; STATUS REGISTER BITS |
||||
|
; |
||||
|
;PCF_PIN .EQU 10000000B |
||||
|
PCF_INI .EQU 01000000B ; 1 if not initialized |
||||
|
PCF_STS .EQU 00100000B |
||||
|
PCF_BER .EQU 00010000B |
||||
|
PCF_AD0 .EQU 00001000B |
||||
|
PCF_LRB .EQU 00001000B |
||||
|
PCF_AAS .EQU 00000100B |
||||
|
PCF_LAB .EQU 00000010B |
||||
|
PCF_BB .EQU 00000001B |
||||
|
; |
||||
|
; CLOCK CHIP FREQUENCIES |
||||
|
; |
||||
|
PCF_CLK3 .EQU 000H |
||||
|
PCF_CLK443 .EQU 010H |
||||
|
PCF_CLK6 .EQU 014H |
||||
|
PCF_CLK8 .EQU 018H |
||||
|
PCF_CLK12 .EQU 01cH |
||||
|
; |
||||
|
; TRANSMISSION FREQUENCIES |
||||
|
; |
||||
|
PCF_TRNS90 .EQU 000H ; 90 kHz */ |
||||
|
PCF_TRNS45 .EQU 001H ; 45 kHz */ |
||||
|
PCF_TRNS11 .EQU 002H ; 11 kHz */ |
||||
|
PCF_TRNS15 .EQU 003H ; 1.5 kHz */ |
||||
|
; |
||||
|
; TIMEOUT AND DELAY VALUES (ARBITRARY) |
||||
|
; |
||||
|
PCF_PINTO .EQU 65000 |
||||
|
PCF_ACKTO .EQU 65000 |
||||
|
PCF_BBTO .EQU 65000 |
||||
|
PCF_LABDLY .EQU 65000 |
||||
|
; |
||||
|
; DATA PORT REGISTERS |
||||
|
; |
||||
|
#IF (CPU_CLK = 443) |
||||
|
PCF_CLK .EQU PCF_CLK443 |
||||
|
#ELSE |
||||
|
#IF (CPU_CLK = 8) |
||||
|
PCF_CLK .EQU PCF_CLK8 |
||||
|
#ELSE |
||||
|
#IF (CPU_CLK = 12) |
||||
|
PCF_CLK .EQU PCF_CLK12 |
||||
|
#ELSE ***ERROR |
||||
|
#ENDIF |
||||
|
#ENDIF |
||||
|
#ENDIF |
||||
|
; |
||||
|
DS7_OUT .EQU 10000000B ; SELECT SQUARE WAVE FUNCTION |
||||
|
DS7_SQWE .EQU 00010000B ; ENABLE SQUARE WAVE OUTPUT |
||||
|
DS7_RATE .EQU 00000000B ; SET 1HZ OUPUT |
||||
|
; |
||||
|
DS7_DS1307 .EQU 11010000B ; DEVICE IDENTIFIER |
||||
|
DS7_W .EQU 00000000B ; DEVICE WRITE |
||||
|
DS7_R .EQU 00000001B ; DEVICE READ |
||||
|
; |
||||
|
DS7_READ .EQU (DS7_DS1307 | DS7_R) ; READ |
||||
|
DS7_WRITE .EQU (DS7_DS1307 | DS7_W) ; WRITE |
||||
|
; |
||||
|
DS7_CTL .EQU (DS7_OUT | DS7_SQWE | DS7_RATE) |
||||
|
; |
||||
|
.ORG 100H |
||||
|
; |
||||
|
; |
||||
|
CALL DS7_RDC ; READ CLOCK DATA INTO BUFFER |
||||
|
CALL DS7_DISP ; DISPLAY TIME AND DATE FROM BUFFER |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------------- |
||||
|
; RTC READ |
||||
|
; |
||||
|
; 1. ISSUE SLAVE ADDRESS WITH START CONDITION AND WRITE STATUS |
||||
|
; 2. OUTPUT THE ADDRESS TO ACCESS. (00H = START OF DS1307 REGISTERS) |
||||
|
; 3. OUTPUT REPEAT START TO TRANSITION TO READ PROCESS |
||||
|
; 4. ISSUE SLAVE ADDRESS WITH READ STATUS |
||||
|
; 5. DO A DUMMY READ |
||||
|
; 6. READ 8 BYTES STARTING AT ADDRESS PREVIOUSLY SET |
||||
|
; 7. END READ WITH NON-ACKNOWLEDGE |
||||
|
; 8. ISSUE STOP AND RELEASE BUS |
||||
|
; |
||||
|
DS7_RDC:LD A,DS7_WRITE ; SET SLAVE ADDRESS |
||||
|
OUT (REGS0),A |
||||
|
; |
||||
|
CALL PCF_WAIT_FOR_BB |
||||
|
JP NZ,PCF_BBERR |
||||
|
; |
||||
|
CALL PCF_START ; GENERATE START CONDITION |
||||
|
CALL PCF_WAIT_FOR_PIN; AND ISSUE THE SLAVE ADDRESS |
||||
|
CALL NZ,PCF_PINERR |
||||
|
; |
||||
|
LD A,0 |
||||
|
OUT (REGS0),A ; PUT ADDRESS MSB ON BUS |
||||
|
CALL PCF_WAIT_FOR_PIN |
||||
|
CALL NZ,PCF_PINERR |
||||
|
; |
||||
|
CALL PCF_REPSTART ; REPEAT START |
||||
|
; |
||||
|
LD A,DS7_READ ; ISSUE CONTROL BYTE + READ |
||||
|
OUT (REGS0),A |
||||
|
; |
||||
|
CALL PCF_READI2C ; DUMMY READ |
||||
|
; |
||||
|
LD HL,DS7_BUF ; READ 8 BYTES INTO BUFFER |
||||
|
LD B,8 |
||||
|
DS7_RL1:CALL PCF_READI2C |
||||
|
LD (HL),A |
||||
|
INC HL |
||||
|
DJNZ DS7_RL1 |
||||
|
; |
||||
|
#IF (0) |
||||
|
LD A,8 |
||||
|
LD DE,DS7_BUF ; DISLAY DATA READ |
||||
|
CALL PRTHEXBUF ; |
||||
|
CALL NEWLINE |
||||
|
#ENDIF |
||||
|
; |
||||
|
LD A,PCF_ES0 ; END WITH NOT-ACKNOWLEDGE |
||||
|
OUT (REGS1),A ; AND RELEASE BUS |
||||
|
NOP |
||||
|
IN A,(REGS0) |
||||
|
NOP |
||||
|
DS7_WTPIN: |
||||
|
IN A,(REGS1) ; READ S1 REGISTER |
||||
|
BIT 7,A ; CHECK PIN STATUS |
||||
|
JP NZ,DS7_WTPIN |
||||
|
CALL PCF_STOP |
||||
|
; |
||||
|
IN A,(REGS0) |
||||
|
RET |
||||
|
|
||||
|
; |
||||
|
;----------------------------------------------------------------------------- |
||||
|
; DISPLAY CLOCK INFORMATION FROM DATA STORED IN BUFFER |
||||
|
; |
||||
|
DS7_DISP: |
||||
|
LD HL,DS7_CLKTBL |
||||
|
DS7_CLP:LD C,(HL) |
||||
|
INC HL |
||||
|
LD D,(HL) |
||||
|
CALL DS7_BCD |
||||
|
INC HL |
||||
|
LD A,(HL) |
||||
|
OR A |
||||
|
RET Z |
||||
|
CALL COUT |
||||
|
INC HL |
||||
|
JR DS7_CLP |
||||
|
RET |
||||
|
; |
||||
|
DS7_CLKTBL: |
||||
|
.DB 04H, 00111111B, '/' |
||||
|
.DB 05H, 00011111B, '/' |
||||
|
.DB 06H, 11111111B, ' ' |
||||
|
.DB 02H, 00011111B, ':' |
||||
|
.DB 01H, 01111111B, ':' |
||||
|
.DB 00H, 01111111B, 00H |
||||
|
; |
||||
|
DS7_BCD:PUSH HL |
||||
|
LD HL,DS7_BUF ; READ VALUE FROM |
||||
|
LD B,0 ; BUFFER, INDEXED BY A |
||||
|
ADD HL,BC |
||||
|
LD A,(HL) |
||||
|
AND D ; MASK OFF UNNEEDED |
||||
|
SRL A |
||||
|
SRL A |
||||
|
SRL A |
||||
|
SRL A |
||||
|
ADD A,30H |
||||
|
CALL COUT |
||||
|
LD A,(HL) |
||||
|
AND 00001111B |
||||
|
ADD A,30H |
||||
|
CALL COUT |
||||
|
POP HL |
||||
|
RET |
||||
|
; |
||||
|
DS7_BUF: .FILL 8,0 ; BUFFER FOR TIME, DATE AND CONTROL |
||||
|
|
||||
|
;----------------------------------------------------------------------------- |
||||
|
PCF_START: |
||||
|
LD A,PCF_START_ |
||||
|
OUT (REGS1),A |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------------- |
||||
|
PCF_REPSTART: |
||||
|
LD A,PCF_REPSTART_ |
||||
|
OUT (REGS1),A |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------------- |
||||
|
PCF_STOP: |
||||
|
LD A,PCF_STOP_ |
||||
|
OUT (REGS1),A |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------------- |
||||
|
;; |
||||
|
PCF_INIT: |
||||
|
LD A,PCF_PIN ; S1=80H: S0 SELECTED, SERIAL |
||||
|
OUT (REGS1),A ; INTERFACE OFF |
||||
|
NOP |
||||
|
IN A,(REGS1) ; CHECK TO SEE S1 NOW USED AS R/W |
||||
|
AND 07FH ; CTRL. PCF8584 DOES THAT WHEN ESO |
||||
|
JP NZ,PCF_INIERR ; IS ZERO |
||||
|
; |
||||
|
LD A,PCF_OWN ; LOAD OWN ADDRESS IN S0, |
||||
|
OUT (REGS0),A ; EFFECTIVE ADDRESS IS (OWN <<1) |
||||
|
NOP |
||||
|
IN A,(REGS0) ; CHECK IT IS REALLY WRITTEN |
||||
|
CP PCF_OWN |
||||
|
JP NZ,PCF_SETERR |
||||
|
; |
||||
|
LD A,+(PCF_PIN | PCF_ES1) ; S1=0A0H |
||||
|
OUT (REGS1),A ; NEXT BYTE IN S2 |
||||
|
NOP |
||||
|
IN A,(REGS1) |
||||
|
AND 07FH |
||||
|
CP PCF_ES1 |
||||
|
JP NZ,PCF_REGERR |
||||
|
; |
||||
|
LD A,PCF_CLK ; LOAD CLOCK REGISTER S2 |
||||
|
OUT (REGS0),A |
||||
|
NOP |
||||
|
IN A,(REGS0) ; CHECK IT'S REALLY WRITTEN, ONLY |
||||
|
AND 1FH ; THE LOWER 5 BITS MATTER |
||||
|
CP PCF_CLK |
||||
|
JP NZ,PCF_CLKERR |
||||
|
; |
||||
|
LD A,PCF_IDLE_ |
||||
|
OUT (REGS1),A |
||||
|
NOP |
||||
|
IN A,(REGS1) |
||||
|
CP +(PCF_PIN | PCF_BB) |
||||
|
JP NZ,PCF_IDLERR |
||||
|
; |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------------- |
||||
|
PCF_HANDLE_LAB: |
||||
|
; |
||||
|
LD A,PCF_PIN |
||||
|
OUT (REGS1),A |
||||
|
LD A,PCF_ES0 |
||||
|
OUT (REGS1),A |
||||
|
; |
||||
|
LD HL,PCF_LABDLY |
||||
|
PCF_LABLP: |
||||
|
LD A,H |
||||
|
OR L |
||||
|
DEC HL |
||||
|
JR NZ,PCF_LABLP |
||||
|
; |
||||
|
IN A,(REGS1) |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------------- |
||||
|
; |
||||
|
; RETURN A=00/Z IF SUCCESSFULL |
||||
|
; RETURN A=FF/NZ IF TIMEOUT |
||||
|
; RETURN A=01/NZ IF LOST ARBITRATION |
||||
|
; PCF_STATUS HOLDS LAST PCF STATUS |
||||
|
; |
||||
|
PCF_WAIT_FOR_PIN: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_PINTO ; SET TIMEOUT VALUE |
||||
|
|
||||
|
PCF_WFP0: |
||||
|
IN A,(REGS1) ; GET BUS |
||||
|
LD (PCF_STATUS),A ; STATUS |
||||
|
LD B,A |
||||
|
|
||||
|
DEC HL ; HAVE WE |
||||
|
LD A,H ; TIMED OUT |
||||
|
OR L |
||||
|
JR Z,PCF_WFP1 ; YES WE HAVE, GO ACTION IT |
||||
|
|
||||
|
LD A,B ; |
||||
|
AND PCF_PIN ; IS TRANSMISSION COMPLETE? |
||||
|
JR NZ,PCF_WFP0 ; KEEP ASKING IF NOT OR |
||||
|
POP HL ; YES COMPLETE (PIN=0) RETURN WITH ZERO |
||||
|
RET |
||||
|
PCF_WFP1: |
||||
|
LD A,B ; DID WE LOSE ARBITRATION? |
||||
|
AND PCF_LAB ; IF A=0 THEN NO |
||||
|
CPL |
||||
|
JR NZ,PCF_WFP2 ; NO |
||||
|
CALL PCF_HANDLE_LAB ; YES GO HANDLE IT |
||||
|
LD (PCF_STATUS),A |
||||
|
XOR A ; RETURN NZ, A=01H |
||||
|
INC A |
||||
|
PCF_WFP2: |
||||
|
POP HL ; RET NZ, A=FF IF TIMEOUT |
||||
|
RET |
||||
|
; |
||||
|
PCF_STATUS .DB 00H |
||||
|
|
||||
|
;-------------------------------------------------------------------------------- |
||||
|
; |
||||
|
; RETURN NZ/FF IF TIMEOUT ERROR |
||||
|
; RETURN NZ/01 IF FAILED TO RECEIVE ACKNOWLEDGE |
||||
|
; RETURN Z/00 IF RECEIVED ACKNOWLEDGE |
||||
|
; |
||||
|
PCF_WAIT_FOR_ACK: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_ACKTO |
||||
|
; |
||||
|
PCF_WFA0: |
||||
|
IN A,(REGS1) ; READ PIN |
||||
|
LD (PCF_STATUS),A ; STATUS |
||||
|
LD B,A |
||||
|
; |
||||
|
DEC HL ; SEE IF WE HAVE TIMED |
||||
|
LD A,H ; OUT WAITING FOR PIN |
||||
|
OR L ; EXIT IF |
||||
|
JR Z,PCF_WFA1 ; WE HAVE |
||||
|
; |
||||
|
LD A,B ; OTHERWISE KEEP LOOPING |
||||
|
AND PCF_PIN ; UNTIL WE GET PIN |
||||
|
JR NZ,PCF_WFA0 ; OR TIMEOUT |
||||
|
; |
||||
|
LD A,B ; WE GOT PIN SO NOW |
||||
|
AND PCF_LRB ; CHECK WE HAVE |
||||
|
LD A,1 |
||||
|
JR Z,PCF_WFA2 ; RECEIVED ACKNOWLEDGE |
||||
|
XOR A |
||||
|
JR PCF_WFA2 |
||||
|
PCF_WFA1: |
||||
|
CPL ; TIMOUT ERROR |
||||
|
PCF_WFA2: |
||||
|
POP HL ; EXIT WITH NZ = FF |
||||
|
RET |
||||
|
; |
||||
|
;-------------------------------------------------------------------------------- |
||||
|
; |
||||
|
; HL POINTS TO DATA |
||||
|
; DE = COUNT |
||||
|
; A = 0 LAST A=1 NOT LAST |
||||
|
; |
||||
|
; |
||||
|
;PCF_READBYTES: ; NOT FUNCTIONAL YET |
||||
|
|
||||
|
LD (PCF_LBF),A ; SAVE LAST BYTE FLAG |
||||
|
; |
||||
|
INC DE ; INCREMENT NUMBER OF BYTES TO READ BY ONE -- DUMMY READ BYTE |
||||
|
LD BC,0 ; SET BYTE COUNTER |
||||
|
; |
||||
|
PCF_RBL:PUSH BC |
||||
|
CALL PCF_WAIT_FOR_PIN ; DO WE HAVE THE BUS? |
||||
|
POP BC |
||||
|
JR Z,PCF_RB1 ; YES |
||||
|
CP 01H |
||||
|
JR Z,PCF_RB3 ; NO - LOST ARBITRATION |
||||
|
JR PCF_RB2 ; NO - TIMEOUT |
||||
|
; |
||||
|
PCF_RB1: |
||||
|
LD A,(PCF_STATUS) |
||||
|
AND PCF_LRB |
||||
|
|
||||
|
|
||||
|
; IS THIS THE SECOND TO LAST BYTE TO GO? |
||||
|
|
||||
|
PUSH DE ; SAVE COUNT |
||||
|
DEC DE ; COUNT (DE) = NUMBER OF BYTES TO READ LESS 1 |
||||
|
EX DE,HL ; SAVE POINTER, PUT COUNT IN DE |
||||
|
XOR A ; CLEAR CARRY FLAG |
||||
|
SBC HL,BC ; DOES BYTE COUNTER = HL (NUMBER OF BYTES TO READ LESS 1) |
||||
|
EX DE,HL ; RESTORE POINTER |
||||
|
POP DE ; RESTORE COUNT |
||||
|
|
||||
|
; Z = YES IT IS |
||||
|
; NZ = NO IT ISN'T |
||||
|
JR NZ,PCF_RB4 |
||||
|
; |
||||
|
PCF_RB4:LD A,B ; IF FIRST READ DO A DUMMY |
||||
|
OR C ; READ OTHERWISE READ AND SAVE |
||||
|
JR NZ,PCF_RB5 |
||||
|
|
||||
|
IN A,(REGS0) ; DUMMY READ |
||||
|
JR PCF_RB6 |
||||
|
|
||||
|
PCF_RB5:IN A,(REGS0) ; READ AND SAVE |
||||
|
LD (HL),A |
||||
|
; |
||||
|
PCF_RB6: ; HAVE WE DONE ALL? |
||||
|
|
||||
|
PUSH DE ; SAVE COUNT |
||||
|
EX DE,HL ; SAVE POINTER, PUT COUNT IN DE |
||||
|
XOR A ; CLEAR CARRY FLAG |
||||
|
SBC HL,BC ; DOES BYTE COUNTER = HL (NUMBER OF BYTES TO READ) |
||||
|
EX DE,HL ; RESTORE POINTER |
||||
|
POP DE ; RESTORE COUNT |
||||
|
; |
||||
|
INC HL ; BUFFER POINTER |
||||
|
INC BC ; COUNT |
||||
|
; |
||||
|
JR NZ,PCF_RBL ; REPEAT UNTIL COUNTS MATCH |
||||
|
RET |
||||
|
; |
||||
|
PCF_RB2: ; TIMEOUT |
||||
|
CALL PCF_STOP |
||||
|
CALL PCF_TOERR |
||||
|
RET |
||||
|
; |
||||
|
PCF_RB3: ; LOST ARBITRATION |
||||
|
CALL PCF_ARBERR |
||||
|
RET |
||||
|
; |
||||
|
PCF_LBF: |
||||
|
.DB 0 ; LAST BYTE FLAG |
||||
|
; |
||||
|
;----------------------------------------------------------------------------- |
||||
|
; READ ONE BYTE FROM I2C |
||||
|
; RETURNS DATA IN A |
||||
|
; Z FLAG SET IS ACKNOWLEDGE RECEIVED (CORRECT OPERATION) |
||||
|
; |
||||
|
PCF_READI2C: |
||||
|
IN A,(REGS1) ; READ S1 REGISTER |
||||
|
BIT 7,A ; CHECK PIN STATUS |
||||
|
JP NZ,PCF_READI2C |
||||
|
BIT 3,A ; CHECK LRB=0 |
||||
|
JP NZ,PCF_RDERR |
||||
|
IN A,(REGS0) ; GET DATA |
||||
|
RET |
||||
|
;----------------------------------------------------------------------------- |
||||
|
; |
||||
|
; POLL THE BUS BUSY BIT TO DETERMINE IF BUS IS FREE. |
||||
|
; RETURN WITH A=00H/Z STATUS IF BUS IS FREE |
||||
|
; RETURN WITH A=FFH/NZ STATUS IF BUS |
||||
|
; |
||||
|
; AFTER RESET THE BUS BUSY BIT WILL BE SET TO 1 I.E. NOT BUSY |
||||
|
; |
||||
|
PCF_WAIT_FOR_BB: |
||||
|
LD HL,PCF_BBTO |
||||
|
PCF_WFBB0: |
||||
|
IN A,(REGS1) |
||||
|
AND PCF_BB |
||||
|
RET Z ; BUS IS FREE RETURN ZERO |
||||
|
DEC HL |
||||
|
LD A,H |
||||
|
OR L |
||||
|
JR NZ,PCF_WFBB0 ; REPEAT IF NOT TIMED OUT |
||||
|
CPL ; RET NZ IF TIMEOUT |
||||
|
RET |
||||
|
; |
||||
|
;----------------------------------------------------------------------------- |
||||
|
; DISPLAY ERROR MESSAGES |
||||
|
; |
||||
|
PCF_RDERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_RDFAIL |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_INIERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_NOPCF |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_SETERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_WRTFAIL |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_REGERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_REGFAIL |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_CLKERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_CLKFAIL |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_IDLERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_IDLFAIL |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_ACKERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_ACKFAIL |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_RDBERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_RDBFAIL |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_TOERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_TOFAIL |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_ARBERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_ARBFAIL |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_PINERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_PINFAIL |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_BBERR: |
||||
|
PUSH HL |
||||
|
LD HL,PCF_BBFAIL |
||||
|
JR PCF_PRTERR |
||||
|
; |
||||
|
PCF_PRTERR: |
||||
|
CALL PRTSTR |
||||
|
CALL NEWLINE |
||||
|
POP HL |
||||
|
RET |
||||
|
; |
||||
|
PCF_NOPCF .DB "NO DEVICE FOUND$" |
||||
|
PCF_WRTFAIL .DB "SETTING DEVICE ID FAILED$" |
||||
|
PCF_REGFAIL .DB "CLOCK REGISTER SELECT ERROR$" |
||||
|
PCF_CLKFAIL .DB "CLOCK SET FAIL$" |
||||
|
PCF_IDLFAIL .DB "BUS IDLE FAILED$" |
||||
|
PCF_ACKFAIL .DB "FAILED TO RECEIVE ACKNOWLEDGE$" |
||||
|
PCF_RDFAIL .DB "READ FAILED$" |
||||
|
PCF_RDBFAIL .DB "READBYTES FAILED$" |
||||
|
PCF_TOFAIL .DB "TIMEOUT ERROR$" |
||||
|
PCF_ARBFAIL .DB "LOST ARBITRATION$" |
||||
|
PCF_PINFAIL .DB "PIN FAIL$" |
||||
|
PCF_BBFAIL .DB "BUS BUSY$" |
||||
|
; |
||||
|
;----------------------------------------------------------------------------- |
||||
|
; |
||||
|
BDOS .EQU 5 ;ENTRY BDOS |
||||
|
BS .EQU 8 ;BACKSPACE |
||||
|
TAB .EQU 9 ;TABULATOR |
||||
|
LF .EQU 0AH ;LINE-FEED |
||||
|
CR .EQU 0DH ;CARRIAGE-RETURN |
||||
|
; |
||||
|
; OUTPUT TEXT AT HL |
||||
|
; |
||||
|
PRTSTR: LD A,(HL) |
||||
|
OR A |
||||
|
RET Z |
||||
|
CALL PRINP |
||||
|
INC HL |
||||
|
JR PRTSTR |
||||
|
; |
||||
|
;Output WORD |
||||
|
;*********** |
||||
|
; |
||||
|
;PARAMETER: Entry WORD IN HL |
||||
|
;********* |
||||
|
; |
||||
|
OUTW: LD A,H |
||||
|
CALL OUTB |
||||
|
LD A,L |
||||
|
CALL OUTB |
||||
|
RET |
||||
|
; |
||||
|
;Output BYTE |
||||
|
;*********** |
||||
|
; |
||||
|
;PARAMETER: Entry BYTE IN A |
||||
|
;********* |
||||
|
; |
||||
|
OUTB: PUSH AF |
||||
|
RRCA |
||||
|
RRCA |
||||
|
RRCA |
||||
|
RRCA |
||||
|
AND 0FH |
||||
|
CALL HBTHE ;Change Half-BYTE |
||||
|
POP AF |
||||
|
AND 0FH |
||||
|
CALL HBTHE |
||||
|
RET |
||||
|
; |
||||
|
;Output HALF-BYTE |
||||
|
;**************** |
||||
|
; |
||||
|
;PARAMETER: Entry Half-BYTE IN A (BIT 0 - 3) |
||||
|
;********* |
||||
|
; |
||||
|
HBTHE: CP 0AH |
||||
|
JR C,HBTHE1 |
||||
|
ADD A,7 ;Character to Letter |
||||
|
HBTHE1: ADD A,30H |
||||
|
LD E,A |
||||
|
CALL PCHAR |
||||
|
RET |
||||
|
; |
||||
|
; |
||||
|
;Output on Screen |
||||
|
;**************** |
||||
|
; |
||||
|
PRBS: LD E,BS |
||||
|
CALL PCHAR |
||||
|
RET |
||||
|
; |
||||
|
;Output CR+LF on Screen |
||||
|
;********************** |
||||
|
; |
||||
|
NEWLINE: |
||||
|
CRLF: LD E,CR |
||||
|
CALL PCHAR |
||||
|
LD E,LF |
||||
|
CALL PCHAR |
||||
|
RET |
||||
|
; |
||||
|
;Output ASCII-Character |
||||
|
;********************** |
||||
|
; |
||||
|
COUT: |
||||
|
PRINP: PUSH AF |
||||
|
PUSH DE |
||||
|
LD E,A |
||||
|
CALL PCHAR |
||||
|
POP DE |
||||
|
POP AF |
||||
|
RET |
||||
|
; |
||||
|
;CALL BDOS with Register Save |
||||
|
;**************************** |
||||
|
; |
||||
|
INCHA: LD C,1 ;INPUT CHARACTER TO A |
||||
|
JR BDO |
||||
|
PCHAR: LD C,2 ;PRINT CHARACTER IN E |
||||
|
JR BDO |
||||
|
PSTRIN: LD C,9 ;PRINT STRING |
||||
|
JR BDO |
||||
|
INBUFF: LD C,10 ;READ CONSOLE-BUFFER |
||||
|
JR BDO |
||||
|
CSTS: LD C,11 ;CONSOLE-STATUS |
||||
|
JR BDO |
||||
|
OPEN: LD C,15 ;OPEN FILE |
||||
|
JR BDO |
||||
|
CLOSE: LD C,16 ;CLOSE FILE |
||||
|
JR BDO |
||||
|
DELETE: LD C,19 ;DELETE FILE |
||||
|
JR BDO |
||||
|
READS: LD C,20 ;READ SEEK |
||||
|
JR BDO |
||||
|
WRITES: LD C,21 ;WRITE SEEK |
||||
|
JR BDO |
||||
|
MAKE: LD C,22 ;MAKE FILE |
||||
|
JR BDO |
||||
|
SETDMA: LD C,26 ;SET DMA-ADDRESS |
||||
|
BDO: PUSH HL |
||||
|
PUSH DE |
||||
|
PUSH BC |
||||
|
PUSH IX |
||||
|
PUSH IY |
||||
|
CALL BDOS |
||||
|
POP IY |
||||
|
POP IX |
||||
|
POP BC |
||||
|
POP DE |
||||
|
POP HL |
||||
|
RET |
||||
|
; |
||||
|
.END |
||||
File diff suppressed because it is too large
@ -0,0 +1,231 @@ |
|||||
|
; |
||||
|
;================================================================================================== |
||||
|
; ROMWBW 2.X CONFIGURATION DEFAULTS FOR MBC |
||||
|
;================================================================================================== |
||||
|
; |
||||
|
; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM |
||||
|
; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD |
||||
|
; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY |
||||
|
; UNDER THIS DIRECTORY. |
||||
|
; |
||||
|
; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS |
||||
|
; FOR THE PLATFORM. |
||||
|
; |
||||
|
#DEFINE PLATFORM_NAME "Multi Board Computer" |
||||
|
; |
||||
|
PLATFORM .EQU PLT_MBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC] |
||||
|
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] |
||||
|
BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] |
||||
|
BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE |
||||
|
HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) |
||||
|
USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION |
||||
|
TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) |
||||
|
; |
||||
|
BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE |
||||
|
; |
||||
|
CPUOSC .EQU 8000000 ; CPU OSC FREQ IN MHZ |
||||
|
INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) |
||||
|
DEFSERCFG .EQU SER_38400_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) |
||||
|
; |
||||
|
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) |
||||
|
RAM_RESERVE .EQU 0 ; RESERVE FIRST N KB OF RAM (USUALLY 0) |
||||
|
ROM_RESERVE .EQU 0 ; RESERVE FIRST N KB OR ROM (USUALLY 0) |
||||
|
MEMMGR .EQU MM_MBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC] |
||||
|
MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) |
||||
|
MPCL_ROM .EQU $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY) |
||||
|
; |
||||
|
RTCIO .EQU $70 ; RTC LATCH REGISTER ADR |
||||
|
; |
||||
|
KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT |
||||
|
KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS |
||||
|
; |
||||
|
CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT |
||||
|
CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT |
||||
|
CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS |
||||
|
CTCTIMER .EQU TRUE ; ENABLE CTC PERIODIC TIMER |
||||
|
CTCMODE .EQU CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] |
||||
|
CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) |
||||
|
CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3) |
||||
|
CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3) |
||||
|
CTCOSC .EQU 614400 ; CTC CLOCK FREQUENCY |
||||
|
; |
||||
|
EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION |
||||
|
; |
||||
|
SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES |
||||
|
; |
||||
|
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] |
||||
|
; |
||||
|
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT |
||||
|
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS |
||||
|
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS |
||||
|
; |
||||
|
LEDENABLE .EQU TRUE ; ENABLES STATUS LED |
||||
|
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC] |
||||
|
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS |
||||
|
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED |
||||
|
; |
||||
|
DSKYENABLE .EQU FALSE ; ENABLES DSKY |
||||
|
DSKYMODE .EQU DSKYMODE_V1 ; DSKY VERSION: DSKYMODE_[V1|NG] |
||||
|
DSKYPPIBASE .EQU $60 ; BASE I/O ADDRESS OF DSKY PPI |
||||
|
DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ) |
||||
|
; |
||||
|
BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE |
||||
|
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP |
||||
|
VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] |
||||
|
ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] |
||||
|
KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] |
||||
|
MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) |
||||
|
MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] |
||||
|
; |
||||
|
DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) |
||||
|
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC] |
||||
|
DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) |
||||
|
; |
||||
|
BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) |
||||
|
BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS |
||||
|
; |
||||
|
INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) |
||||
|
; |
||||
|
RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) |
||||
|
; |
||||
|
HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT |
||||
|
SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) |
||||
|
; |
||||
|
DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) |
||||
|
DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] |
||||
|
; |
||||
|
DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) |
||||
|
; |
||||
|
UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) |
||||
|
UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ |
||||
|
UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS |
||||
|
UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED |
||||
|
UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART |
||||
|
UARTCAS .EQU TRUE ; UART: AUTO-DETECT ECB CASSETTE UART |
||||
|
UARTMFP .EQU TRUE ; UART: AUTO-DETECT MF/PIC UART |
||||
|
UART4 .EQU TRUE ; UART: AUTO-DETECT 4UART UART |
||||
|
UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART |
||||
|
; |
||||
|
ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) |
||||
|
; |
||||
|
Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) |
||||
|
; |
||||
|
ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) |
||||
|
; |
||||
|
SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) |
||||
|
SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT |
||||
|
SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) |
||||
|
SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP |
||||
|
SIO0MODE .EQU SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP] |
||||
|
SIO0BASE .EQU $B0 ; SIO 0: REGISTERS BASE ADR |
||||
|
SIO0ACLK .EQU (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 |
||||
|
SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG |
||||
|
SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE |
||||
|
SIO0BCLK .EQU (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 |
||||
|
SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG |
||||
|
SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE |
||||
|
; |
||||
|
XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG |
||||
|
; |
||||
|
VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) |
||||
|
VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] |
||||
|
CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) |
||||
|
NECENABLE .EQU FALSE ; NEC: ENABLE NEC UPD7220 VIDEO/KBD DRIVER (NEC.ASM) |
||||
|
TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) |
||||
|
TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG/N8/RC/RCV9958] |
||||
|
TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) |
||||
|
VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) |
||||
|
VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] |
||||
|
; |
||||
|
MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) |
||||
|
MDROM .EQU TRUE ; MD: ENABLE ROM DISK |
||||
|
MDRAM .EQU TRUE ; MD: ENABLE RAM DISK |
||||
|
MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM |
||||
|
; |
||||
|
; |
||||
|
FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) |
||||
|
FDMODE .EQU FDMODE_DIO3 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC] |
||||
|
FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) |
||||
|
FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) |
||||
|
FDMEDIA .EQU FDM144 ; FD: DEFAULT MEDIA FORMAT FDM[720|144|360|120|111] |
||||
|
FDMEDIAALT .EQU FDM720 ; FD: ALTERNATE MEDIA FORMAT FDM[720|144|360|120|111] |
||||
|
FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS |
||||
|
; |
||||
|
RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER |
||||
|
RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) |
||||
|
; |
||||
|
IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) |
||||
|
IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH |
||||
|
IDE0MODE .EQU IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] |
||||
|
IDE0BASE .EQU $20 ; IDE 0: IO BASE ADDRESS |
||||
|
IDE0DATLO .EQU $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O |
||||
|
IDE0DATHI .EQU $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O |
||||
|
IDE0A8BIT .EQU FALSE ; IDE 0A (MASTER): 8 BIT XFER |
||||
|
IDE0B8BIT .EQU FALSE ; IDE 0B (MASTER): 8 BIT XFER |
||||
|
IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] |
||||
|
IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS |
||||
|
IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O |
||||
|
IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O |
||||
|
IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER |
||||
|
IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER |
||||
|
IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] |
||||
|
IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS |
||||
|
IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O |
||||
|
IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O |
||||
|
IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER |
||||
|
IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER |
||||
|
; |
||||
|
PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) |
||||
|
PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP |
||||
|
PPIDE0BASE .EQU $60 ; PPIDE 0: PPI REGISTERS BASE ADR |
||||
|
PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER |
||||
|
PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER |
||||
|
PPIDE1BASE .EQU $20 ; PPIDE 1: PPI REGISTERS BASE ADR |
||||
|
PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER |
||||
|
PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER |
||||
|
PPIDE2BASE .EQU $44 ; PPIDE 2: PPI REGISTERS BASE ADR |
||||
|
PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER |
||||
|
PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER |
||||
|
; |
||||
|
SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) |
||||
|
SDMODE .EQU SDMODE_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT] |
||||
|
SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE |
||||
|
SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY |
||||
|
SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE |
||||
|
; |
||||
|
PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) |
||||
|
PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT |
||||
|
PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT |
||||
|
; |
||||
|
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) |
||||
|
; |
||||
|
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) |
||||
|
HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) |
||||
|
; |
||||
|
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD |
||||
|
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD |
||||
|
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) |
||||
|
PIOZBASE .EQU $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD |
||||
|
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP |
||||
|
PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI |
||||
|
; |
||||
|
UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) |
||||
|
UFBASE .EQU $0C ; UF: REGISTERS BASE ADR |
||||
|
; |
||||
|
SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER |
||||
|
AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER |
||||
|
SN7CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4 |
||||
|
; |
||||
|
AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER |
||||
|
AY_CLK .EQU CPUOSC / 4 ; DEFAULT TO CPUOSC / 4 |
||||
|
AYMODE .EQU AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG/N8/RCZ80/RCZ180] |
||||
|
; |
||||
|
SPKENABLE .EQU TRUE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) |
||||
@ -0,0 +1,561 @@ |
|||||
|
; |
||||
|
;================================================================================================== |
||||
|
; DSKY NEXT GEN ROUTINES |
||||
|
;================================================================================================== |
||||
|
; |
||||
|
; A DSKYNG CAN SHARE A PPI BUS WITH EITHER A PPIDE OR PPISD. |
||||
|
; |
||||
|
; LED SEGMENTS (BIT VALUES) |
||||
|
; |
||||
|
; +--01--+ |
||||
|
; 20 02 |
||||
|
; +--40--+ |
||||
|
; 10 04 |
||||
|
; +--08--+ 80 |
||||
|
; |
||||
|
; KEY CODE MAP (KEY CODES) --CCCRRR |
||||
|
; |
||||
|
; 00 08 10 18 |
||||
|
; 01 09 11 19 |
||||
|
; 02 0A 12 1A |
||||
|
; 03 0B 13 1B |
||||
|
; 04 0C 14 1C |
||||
|
; 05 0D 15 1D |
||||
|
; |
||||
|
; LED BIT MAP (BIT VALUES) |
||||
|
; |
||||
|
; $08 $09 $0A $0B |
||||
|
; --- --- --- --- |
||||
|
; 01 01 01 01 |
||||
|
; 02 02 02 02 |
||||
|
; 04 04 04 04 |
||||
|
; 08 08 08 08 |
||||
|
; 10 10 10 10 |
||||
|
; 20 20 20 20 |
||||
|
; |
||||
|
PPIA .EQU DSKYPPIBASE + 0 ; PORT A |
||||
|
PPIB .EQU DSKYPPIBASE + 1 ; PORT B |
||||
|
PPIC .EQU DSKYPPIBASE + 2 ; PORT C |
||||
|
PPIX .EQU DSKYPPIBASE + 3 ; PPI CONTROL PORT |
||||
|
; |
||||
|
DSKY_PPIX_RD: .EQU %10010010 ; PPIX VALUE FOR READS |
||||
|
DSKY_PPIX_WR: .EQU %10000010 ; PPIX VALUE FOR WRITES |
||||
|
; |
||||
|
; PIO CHANNEL C: |
||||
|
; |
||||
|
; 7 6 5 4 3 2 1 0 |
||||
|
; RES /RD /WR CS CS 0 0 A0 |
||||
|
; |
||||
|
; SETTING BITS 3 & 4 WILL ASSERT /CS ON 3279 |
||||
|
; CLEAR BITS 5 OR 6 TO ASSERT READ/WRITE |
||||
|
; |
||||
|
DSKY_PPI_IDLE: .EQU %01100000 |
||||
|
; |
||||
|
DSKY_CMD_CLR: .EQU %11011111 ; CLEAR (ALL OFF) |
||||
|
DSKY_CMD_CLRX: .EQU %11010011 ; CLEAR (ALL ON) |
||||
|
DSKY_CMD_WDSP: .EQU %10010000 ; WRITE DISPLAY RAM |
||||
|
DSKY_CMD_RDSP: .EQU %01110000 ; READ DISPLAY RAM |
||||
|
DSKY_CMD_CLK: .EQU %00100000 ; SET CLK PRESCALE |
||||
|
DSKY_CMD_FIFO: .EQU %01000000 ; READ FIFO |
||||
|
; |
||||
|
DSKY_PRESCL: .EQU DSKYOSC/100000 ; PRESCALER |
||||
|
; |
||||
|
;__DSKY_INIT_________________________________________________________________________________________ |
||||
|
; |
||||
|
; CONFIGURE PARALLEL PORT AND INITIALIZE 8279 |
||||
|
;____________________________________________________________________________________________________ |
||||
|
; |
||||
|
; |
||||
|
; HARDWARE RESET 8279 BY PULSING RESET LINE |
||||
|
; |
||||
|
DSKY_INIT: |
||||
|
; |
||||
|
; SETUP PPI |
||||
|
CALL DSKY_PPIRD |
||||
|
; INIT 8279 VALUES TO IDLE STATE |
||||
|
LD A,DSKY_PPI_IDLE |
||||
|
OUT (PPIC),A |
||||
|
; PULSE RESET SIGNAL ON 8279 |
||||
|
SET 7,A |
||||
|
OUT (PPIC),A |
||||
|
RES 7,A |
||||
|
OUT (PPIC),A |
||||
|
; DONE |
||||
|
; |
||||
|
DSKY_REINIT: |
||||
|
CALL DSKY_PPIIDLE |
||||
|
; SET CLOCK SCALER TO 20 |
||||
|
LD A,DSKY_CMD_CLK | DSKY_PRESCL |
||||
|
CALL DSKY_CMD |
||||
|
LD A,%00001000 ; dan |
||||
|
CALL DSKY_CMD |
||||
|
; FALL THRU |
||||
|
; |
||||
|
DSKY_RESET: |
||||
|
; RESET DSKY |
||||
|
LD A,DSKY_CMD_CLR |
||||
|
CALL DSKY_CMD |
||||
|
RET |
||||
|
; |
||||
|
#IFDEF DSKY_KBD |
||||
|
; |
||||
|
KY_0 .EQU $00 |
||||
|
KY_1 .EQU $01 |
||||
|
KY_2 .EQU $02 |
||||
|
KY_3 .EQU $03 |
||||
|
KY_4 .EQU $04 |
||||
|
KY_5 .EQU $05 |
||||
|
KY_6 .EQU $06 |
||||
|
KY_7 .EQU $07 |
||||
|
KY_8 .EQU $08 |
||||
|
KY_9 .EQU $09 |
||||
|
KY_A .EQU $0A |
||||
|
KY_B .EQU $0B |
||||
|
KY_C .EQU $0C |
||||
|
KY_D .EQU $0D |
||||
|
KY_E .EQU $0E |
||||
|
KY_F .EQU $0F |
||||
|
KY_FW .EQU $10 ; FORWARD |
||||
|
KY_BK .EQU $11 ; BACKWARD |
||||
|
KY_CL .EQU $12 ; CLEAR |
||||
|
KY_EN .EQU $13 ; ENTER |
||||
|
KY_DE .EQU $14 ; DEPOSIT |
||||
|
KY_EX .EQU $15 ; EXAMINE |
||||
|
KY_GO .EQU $16 ; GO |
||||
|
KY_BO .EQU $17 ; BOOT |
||||
|
; |
||||
|
;__DSKY_STAT_________________________________________________________________________________________ |
||||
|
; |
||||
|
; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS |
||||
|
;____________________________________________________________________________________________________ |
||||
|
; |
||||
|
DSKY_STAT: |
||||
|
CALL DSKY_ST |
||||
|
AND $0F ; ISOLATE THE CUR FIFO LEN |
||||
|
RET |
||||
|
; |
||||
|
;__DSKY_GETKEY_____________________________________________________________________________________ |
||||
|
; |
||||
|
; WAIT FOR A DSKY KEYPRESS AND RETURN |
||||
|
;____________________________________________________________________________________________________ |
||||
|
; |
||||
|
DSKY_GETKEY: |
||||
|
CALL DSKY_STAT |
||||
|
JR Z,DSKY_GETKEY ; LOOP IF NOTHING THERE |
||||
|
LD A,DSKY_CMD_FIFO |
||||
|
CALL DSKY_CMD |
||||
|
CALL DSKY_DIN |
||||
|
LD B,24 ; SIZE OF DECODE TABLE |
||||
|
LD C,0 ; INDEX |
||||
|
LD HL,DSKY_KEYMAP ; POINT TO BEGINNING OF TABLE |
||||
|
DSKY_GETKEY1: |
||||
|
CP (HL) ; MATCH? |
||||
|
JR Z,DSKY_GETKEY2 ; FOUND, DONE |
||||
|
INC HL |
||||
|
INC C ; BUMP INDEX |
||||
|
DJNZ DSKY_GETKEY1 ; LOOP UNTIL EOT |
||||
|
LD A,$FF ; NOT FOUND ERR, RETURN $FF |
||||
|
RET |
||||
|
DSKY_GETKEY2: |
||||
|
; RETURN THE INDEX POSITION WHERE THE SCAN CODE WAS FOUND |
||||
|
LD A,C ; RETURN INDEX VALUE |
||||
|
RET |
||||
|
; |
||||
|
;_KEYMAP_TABLE_____________________________________________________________________________________________________________ |
||||
|
; |
||||
|
DSKY_KEYMAP: |
||||
|
; POS $00 $01 $02 $03 $04 $05 $06 $07 |
||||
|
; KEY [0] [1] [2] [3] [4] [5] [6] [7] |
||||
|
.DB $0D, $04, $0C, $14, $03, $0B, $13, $02 |
||||
|
; |
||||
|
; POS $08 $09 $0A $0B $0C $0D $0E $0F |
||||
|
; KEY [8] [9] [A] [B] [C] [D] [E] [F] |
||||
|
.DB $0A, $12, $01, $09, $11, $00, $08, $10 |
||||
|
; |
||||
|
; POS $10 $11 $12 $13 $14 $15 $16 $17 |
||||
|
; KEY [FW] [BK] [CL] [EN] [DE] [EX] [GO] [BO] |
||||
|
.DB $05, $15, $1D, $1C, $1B, $1A, $19, $18 |
||||
|
; |
||||
|
#ENDIF ; DSKY_KBD |
||||
|
; |
||||
|
;================================================================================================== |
||||
|
; DSKY HEX DISPLAY |
||||
|
;================================================================================================== |
||||
|
; |
||||
|
DSKY_HEXOUT: |
||||
|
LD B,DSKY_HEXBUFLEN |
||||
|
LD HL,DSKY_BUF |
||||
|
LD DE,DSKY_HEXBUF |
||||
|
DSKY_HEXOUT1: |
||||
|
LD A,(DE) ; FIRST NIBBLE |
||||
|
SRL A |
||||
|
SRL A |
||||
|
SRL A |
||||
|
SRL A |
||||
|
PUSH HL |
||||
|
LD HL,HEXMAP |
||||
|
CALL DSKY_ADDHLA |
||||
|
LD A,(HL) |
||||
|
POP HL |
||||
|
LD (HL),A |
||||
|
INC HL |
||||
|
LD A,(DE) ; SECOND NIBBLE |
||||
|
AND 0FH |
||||
|
PUSH HL |
||||
|
LD HL,HEXMAP |
||||
|
CALL DSKY_ADDHLA |
||||
|
LD A,(HL) |
||||
|
POP HL |
||||
|
LD (HL),A |
||||
|
INC HL |
||||
|
INC DE ; NEXT BYTE |
||||
|
DJNZ DSKY_HEXOUT1 |
||||
|
LD HL,DSKY_BUF |
||||
|
JR DSKY_SHOW |
||||
|
; |
||||
|
;================================================================================================== |
||||
|
; DSKY SHOW BUFFER |
||||
|
; HL: ADDRESS OF BUFFER |
||||
|
; ENTER @ SHOWHEX FOR HEX DECODING |
||||
|
; ENTER @ SHOWSEG FOR SEGMENT DECODING |
||||
|
;================================================================================================== |
||||
|
; |
||||
|
DSKY_SHOWHEX: |
||||
|
JR DSKY_SHOW |
||||
|
; |
||||
|
DSKY_SHOWSEG: |
||||
|
JR DSKY_SHOW |
||||
|
; |
||||
|
DSKY_SHOW: |
||||
|
; PUSH HL |
||||
|
; CALL DSKY_RESET |
||||
|
; POP HL |
||||
|
LD C,0 ; STARTING DISPLAY POSITION |
||||
|
LD B,DSKY_BUFLEN ; NUMBER OF CHARS |
||||
|
JP DSKY_PUTSTR |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
; COMMAND IN A |
||||
|
; TRASHES BC |
||||
|
; |
||||
|
DSKY_CMD: |
||||
|
LD B,$01 |
||||
|
JR DSKY_DOUT2 |
||||
|
; |
||||
|
; DATA VALUE IN A |
||||
|
; TRASHES BC |
||||
|
; |
||||
|
DSKY_DOUT: |
||||
|
LD B,$00 |
||||
|
; |
||||
|
DSKY_DOUT2: |
||||
|
; |
||||
|
; SAVE INCOMING DATA BYTE |
||||
|
PUSH AF |
||||
|
; |
||||
|
; SET PPI LINE CONFIG TO WRITE MODE |
||||
|
CALL DSKY_PPIWR |
||||
|
; |
||||
|
; SETUP |
||||
|
LD C,PPIC |
||||
|
; |
||||
|
; SET ADDRESS FIRST |
||||
|
LD A,DSKY_PPI_IDLE |
||||
|
OR B |
||||
|
OUT (C),A |
||||
|
; |
||||
|
; ASSERT 8279 /CS |
||||
|
SET 3,A |
||||
|
SET 4,A |
||||
|
OUT (C),A |
||||
|
; |
||||
|
; PPIC WORKING VALUE TO REG B NOW |
||||
|
LD B,A |
||||
|
; |
||||
|
; ASSERT DATA BYTE VALUE |
||||
|
POP AF |
||||
|
OUT (PPIA),A |
||||
|
; |
||||
|
; PULSE /WR |
||||
|
RES 5,B |
||||
|
OUT (C),B |
||||
|
NOP ; MAY NOT BE NEEDED |
||||
|
SET 5,B |
||||
|
OUT (C),B |
||||
|
; |
||||
|
; DEASSERT /CS |
||||
|
RES 3,B |
||||
|
RES 4,B |
||||
|
OUT (C),B |
||||
|
; |
||||
|
; CLEAR ADDRESS BIT |
||||
|
RES 0,B |
||||
|
OUT (C),B |
||||
|
; |
||||
|
; DONE |
||||
|
CALL DSKY_PPIIDLE |
||||
|
RET |
||||
|
; |
||||
|
; STATUS VALUE IN A |
||||
|
; TRASHES BC |
||||
|
; |
||||
|
DSKY_ST: |
||||
|
LD B,$01 |
||||
|
JR DSKY_DIN2 |
||||
|
; |
||||
|
; DATA VALUE RETURNED IN A |
||||
|
; TRASHES BC |
||||
|
; |
||||
|
DSKY_DIN: |
||||
|
LD B,$00 |
||||
|
; |
||||
|
DSKY_DIN2: |
||||
|
; SET PPI LINE CONFIG TO WRITE MODE |
||||
|
CALL DSKY_PPIRD |
||||
|
; |
||||
|
; SETUP |
||||
|
LD C,PPIC |
||||
|
; |
||||
|
; SET ADDRESS FIRST |
||||
|
LD A,DSKY_PPI_IDLE |
||||
|
OR B |
||||
|
OUT (C),A |
||||
|
; |
||||
|
; ASSERT 8279 /CS |
||||
|
SET 3,A |
||||
|
SET 4,A |
||||
|
OUT (C),A |
||||
|
; |
||||
|
; PPIC WORKING VALUE TO REG B NOW |
||||
|
LD B,A |
||||
|
; |
||||
|
; ASSERT /RD |
||||
|
RES 6,B |
||||
|
OUT (C),B |
||||
|
; |
||||
|
; GET VALUE |
||||
|
IN A,(PPIA) |
||||
|
; |
||||
|
; DEASSERT /RD |
||||
|
SET 6,B |
||||
|
OUT (C),B |
||||
|
; |
||||
|
; DEASSERT /CS |
||||
|
RES 3,B |
||||
|
RES 4,B |
||||
|
OUT (C),B |
||||
|
; |
||||
|
; CLEAR ADDRESS BIT |
||||
|
RES 0,B |
||||
|
OUT (C),B |
||||
|
; |
||||
|
; DONE |
||||
|
CALL DSKY_PPIIDLE |
||||
|
RET |
||||
|
; |
||||
|
; BLANK THE DISPLAY (WITHOUT USING CLEAR) |
||||
|
; |
||||
|
DSKY_BLANK: |
||||
|
LD A,DSKY_CMD_WDSP |
||||
|
CALL DSKY_CMD |
||||
|
LD B,16 |
||||
|
DSKY_BLANK1: |
||||
|
PUSH BC |
||||
|
LD A,$FF |
||||
|
CALL DSKY_DOUT |
||||
|
POP BC |
||||
|
DJNZ DSKY_BLANK1 |
||||
|
RET |
||||
|
; |
||||
|
; WRITE A RAW BYTE VALUE TO DSKY DISPLAY RAM |
||||
|
; AT LOCATION IN REGISTER C, VALUE IN A. |
||||
|
; |
||||
|
DSKY_PUTBYTE: |
||||
|
PUSH BC |
||||
|
PUSH AF |
||||
|
LD A,C |
||||
|
ADD A,DSKY_CMD_WDSP |
||||
|
CALL DSKY_CMD |
||||
|
POP AF |
||||
|
XOR $FF |
||||
|
CALL DSKY_DOUT |
||||
|
POP BC |
||||
|
RET |
||||
|
; |
||||
|
; READ A RAW BYTE VALUE FROM DSKY DISPLAY RAM |
||||
|
; AT LOCATION IN REGISTER C, VALUE RETURNED IN A |
||||
|
; |
||||
|
DSKY_GETBYTE: |
||||
|
PUSH BC |
||||
|
LD A,C |
||||
|
ADD A,DSKY_CMD_RDSP |
||||
|
CALL DSKY_CMD |
||||
|
CALL DSKY_DIN |
||||
|
XOR $FF |
||||
|
POP BC |
||||
|
RET |
||||
|
; |
||||
|
; WRITE A STRING OF RAW BYTE VALUES TO DSKY DISPLAY RAM |
||||
|
; AT LOCATION IN REGISTER C, LENGTH IN B, ADDRESS IN HL. |
||||
|
; |
||||
|
DSKY_PUTSTR: |
||||
|
PUSH BC |
||||
|
LD A,C |
||||
|
ADD A,DSKY_CMD_WDSP |
||||
|
CALL DSKY_CMD |
||||
|
POP BC |
||||
|
; |
||||
|
DSKY_PUTSTR1: |
||||
|
LD A,(HL) |
||||
|
XOR $FF |
||||
|
INC HL |
||||
|
PUSH BC |
||||
|
CALL DSKY_DOUT |
||||
|
POP BC |
||||
|
DJNZ DSKY_PUTSTR1 |
||||
|
RET |
||||
|
; |
||||
|
; READ A STRING OF RAW BYTE VALUES FROM DSKY DISPLAY RAM |
||||
|
; AT LOCATION IN REGISTER C, LENGTH IN B, ADDRESS IN HL. |
||||
|
; |
||||
|
DSKY_GETSTR: |
||||
|
PUSH BC |
||||
|
LD A,C |
||||
|
ADD A,DSKY_CMD_RDSP |
||||
|
CALL DSKY_CMD |
||||
|
POP BC |
||||
|
; |
||||
|
DSKY_GETSTR1: |
||||
|
PUSH BC |
||||
|
CALL DSKY_DIN |
||||
|
POP BC |
||||
|
XOR $FF |
||||
|
LD (HL),A |
||||
|
INC HL |
||||
|
DJNZ DSKY_GETSTR1 |
||||
|
RET |
||||
|
; |
||||
|
; HL IS ADR OF ENCODED STRING OF BYTES |
||||
|
; B IS LEN OF STRING (BYTES) |
||||
|
; C IS POSITION IN DISPLAY RAM TO WRITE |
||||
|
; |
||||
|
DSKY_PUTENCSTR: |
||||
|
PUSH BC |
||||
|
LD A,C |
||||
|
ADD A,DSKY_CMD_WDSP |
||||
|
CALL DSKY_CMD |
||||
|
POP BC |
||||
|
EX DE,HL |
||||
|
DSKY_PUTENCSTR1: |
||||
|
LD A,(DE) |
||||
|
INC DE |
||||
|
LD HL,HEXMAP |
||||
|
CALL DSKY_ADDHLA |
||||
|
LD A,(HL) |
||||
|
XOR $FF |
||||
|
PUSH BC |
||||
|
CALL DSKY_DOUT |
||||
|
POP BC |
||||
|
DJNZ DSKY_PUTENCSTR1 |
||||
|
RET |
||||
|
; |
||||
|
; SETUP PPI FOR WRITING: PUT PPI PORT A IN OUTPUT MODE |
||||
|
; AVOID REWRTING PPIX IF ALREADY IN OUTPUT MODE |
||||
|
; |
||||
|
DSKY_PPIWR: |
||||
|
PUSH AF |
||||
|
; |
||||
|
; CHECK FOR WRITE MODE |
||||
|
LD A,(DSKY_PPIX_VAL) |
||||
|
CP DSKY_PPIX_WR |
||||
|
JR Z,DSKY_PPIWR1 |
||||
|
; |
||||
|
; SET PPI TO WRITE MODE |
||||
|
LD A,DSKY_PPIX_WR |
||||
|
OUT (PPIX),A |
||||
|
LD (DSKY_PPIX_VAL),A |
||||
|
; |
||||
|
; RESTORE PORT C (MAY NOT BE NEEDED) |
||||
|
LD A,DSKY_PPI_IDLE |
||||
|
OUT (PPIC),A |
||||
|
; |
||||
|
DSKY_PPIWR1: |
||||
|
; |
||||
|
POP AF |
||||
|
RET |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
DSKY_ADDHLA: |
||||
|
ADD A,L |
||||
|
LD L,A |
||||
|
RET NC |
||||
|
INC H |
||||
|
RET |
||||
|
; |
||||
|
; SETUP PPI FOR READING: PUT PPI PORT A IN INPUT MODE |
||||
|
; AVOID REWRTING PPIX IF ALREADY IN INPUT MODE |
||||
|
; |
||||
|
DSKY_PPIRD: |
||||
|
PUSH AF |
||||
|
; |
||||
|
; CHECK FOR READ MODE |
||||
|
LD A,(DSKY_PPIX_VAL) |
||||
|
CP DSKY_PPIX_RD |
||||
|
JR Z,DSKY_PPIRD1 |
||||
|
; |
||||
|
; SET PPI TO READ MODE |
||||
|
LD A,DSKY_PPIX_RD |
||||
|
OUT (PPIX),A |
||||
|
LD (DSKY_PPIX_VAL),A |
||||
|
; |
||||
|
; ; DIAGNOSTIC |
||||
|
; LD A,'R' |
||||
|
; CALL COUT |
||||
|
; |
||||
|
DSKY_PPIRD1: |
||||
|
POP AF |
||||
|
RET |
||||
|
; |
||||
|
; RELEASE USE OF PPI |
||||
|
; |
||||
|
DSKY_PPIIDLE: |
||||
|
JR DSKY_PPIRD ; SAME AS READ MODE |
||||
|
; |
||||
|
; |
||||
|
; |
||||
|
|
||||
|
; |
||||
|
; CODES FOR NUMERICS |
||||
|
; HIGH BIT ALWAYS SET TO SUPPRESS DECIMAL POINT |
||||
|
; CLEAR HIGH BIT TO SHOW DECIMAL POINT |
||||
|
; |
||||
|
HEXMAP: |
||||
|
DSKY_NUMS: |
||||
|
.DB $3F ; 0 |
||||
|
.DB $06 ; 1 |
||||
|
.DB $5B ; 2 |
||||
|
.DB $4F ; 3 |
||||
|
.DB $66 ; 4 |
||||
|
.DB $6D ; 5 |
||||
|
.DB $7D ; 6 |
||||
|
.DB $07 ; 7 |
||||
|
.DB $7F ; 8 |
||||
|
.DB $67 ; 9 |
||||
|
.DB $77 ; A |
||||
|
.DB $7C ; B |
||||
|
.DB $39 ; C |
||||
|
.DB $5E ; D |
||||
|
.DB $79 ; E |
||||
|
.DB $71 ; F |
||||
|
; |
||||
|
DSKY_PPIX_VAL: .DB 0 |
||||
|
; |
||||
|
; SEG DISPLAY WORKING STORAGE |
||||
|
; |
||||
|
DSKY_BUF .FILL 8,0 |
||||
|
DSKY_BUFLEN .EQU $ - DSKY_BUF |
||||
|
DSKY_HEXBUF .FILL 4,0 |
||||
|
DSKY_HEXBUFLEN .EQU $ - DSKY_HEXBUF |
||||
@ -1,12 +0,0 @@ |
|||||
#INCLUDE "std.asm" |
|
||||
; |
|
||||
SLACK .EQU ($8000-BAS_SIZ-TBC_SIZ-FTH_SIZ-GAM_SIZ-USR_SIZ) |
|
||||
.FILL SLACK,00H |
|
||||
; |
|
||||
MON_STACK .EQU $ |
|
||||
; |
|
||||
.ECHO "Padspace space created: " |
|
||||
.ECHO SLACK |
|
||||
.ECHO " bytes.\n" |
|
||||
|
|
||||
.END |
|
||||
Loading…
Reference in new issue