mirror of https://github.com/wwarthen/RomWBW.git
committed by
GitHub
1 changed files with 765 additions and 0 deletions
@ -0,0 +1,765 @@ |
|||
; |
|||
;================================================================================================== |
|||
; DSKY V3 TEST APPLICATION |
|||
;================================================================================================== |
|||
; |
|||
; BUILD WITH TASM: |
|||
; tasm -t80 -g3 -fFF tstdsky.asm tstdsky.com tstdsky.lst |
|||
; |
|||
; z80asm -itstdsky.asm -ltstdsky.lst -otstdsky.com |
|||
; |
|||
; PIO 82C55 I/O IS DECODED TO PORT $60-$67 (ADJUST BELOW AS NEEDED) |
|||
; ASSUMES UART AT PORT $68 (ADJUST BELOW AS NEEDED) |
|||
; |
|||
; THIS CODE IS BELIEVED TO BE COMPATIBLE WITH PPIDE OR PPISD |
|||
; RUNNING ON SAME PPI BUS. |
|||
; |
|||
DSKY_OSC: EQU 2000000 ; OSCILLATOR FREQ IN HZ |
|||
; |
|||
BDOS: EQU FALSE ; BDOS OR DIRECT TO 8250ISH |
|||
; |
|||
UART: EQU $68 ; UART BASE IO ADDRESS |
|||
PPI_BASE: EQU $60 ; PPI BASE IO PORT |
|||
; |
|||
; 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 |
|||
; |
|||
FALSE: EQU 0 |
|||
TRUE: EQU ~FALSE |
|||
; |
|||
PPIA: EQU PPI_BASE + 0 ; PORT A |
|||
PPIB: EQU PPI_BASE + 1 ; PORT B |
|||
PPIC: EQU PPI_BASE + 2 ; PORT C |
|||
PPIX: EQU PPI_BASE + 3 ; PIO 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 DSKY_OSC / 100000 ; PRESCALER |
|||
; |
|||
ORG $100 |
|||
; |
|||
; SAVE PREVIOUS STACK POINTER, AND SWITCH TO OUR STACK |
|||
LD (STACKSAV),SP |
|||
LD SP,STACK |
|||
; |
|||
CALL PRTSTRD |
|||
DB "\r\nNextGenDSKY Test Program, v1.2, 2021-06-26$" |
|||
CALL PRTSTRD |
|||
DB "\r\nPPI port 0x$" |
|||
LD A,PPI_BASE |
|||
CALL PRTHEXBYTE |
|||
CALL NEWLINE |
|||
; |
|||
CALL DSKY_INIT |
|||
CALL DSKY_READ |
|||
; |
|||
CALL PRTSTRD |
|||
DB "\r\nCLEAR Command (all ON)$" |
|||
LD A,DSKY_CMD_CLRX |
|||
CALL DSKY_CMD |
|||
CALL WAITKEY |
|||
CALL DSKY_READ |
|||
; |
|||
CALL PRTSTRD |
|||
DB "\r\nCLEAR Command (all OFF)$" |
|||
LD A,DSKY_CMD_CLR |
|||
CALL DSKY_CMD |
|||
CALL WAITKEY |
|||
CALL DSKY_READ |
|||
; |
|||
CALL PRTSTRD |
|||
DB "\r\nIndividual segments and LEDs$" |
|||
LD HL,PAT1 |
|||
LD B,PAT1LN |
|||
LD C,0 |
|||
CALL DSKY_PUTSTR |
|||
CALL WAITKEY |
|||
CALL DSKY_READ |
|||
; |
|||
CALL PRTSTRD |
|||
DB "\r\nIncrementing segments and LEDs$" |
|||
LD HL,PAT2 |
|||
LD B,PAT2LN |
|||
LD C,0 |
|||
CALL DSKY_PUTSTR |
|||
CALL WAITKEY |
|||
CALL DSKY_READ |
|||
; |
|||
CALL PRTSTRD |
|||
DB "\r\nOmit individual segments and LEDs$" |
|||
LD HL,PAT3 |
|||
LD B,PAT3LN |
|||
LD C,0 |
|||
CALL DSKY_PUTSTR |
|||
CALL WAITKEY |
|||
CALL DSKY_READ |
|||
; |
|||
; DISPLAY HEX DIGITS 0-7 |
|||
; |
|||
CALL PRTSTRD |
|||
DB "\r\nHex digits 0-7$" |
|||
LD HL,HEX1 |
|||
LD B,HEX1LN |
|||
LD C,0 |
|||
CALL DSKY_PUTENCSTR |
|||
CALL WAITKEY |
|||
CALL DSKY_READ |
|||
; |
|||
CALL PRTSTRD |
|||
DB "\r\nHex digits 8-F$" |
|||
LD HL,HEX2 |
|||
LD B,HEX2LN |
|||
LD C,0 |
|||
CALL DSKY_PUTENCSTR |
|||
CALL WAITKEY |
|||
CALL DSKY_READ |
|||
; |
|||
CALL DSKY_BLANK |
|||
; |
|||
; WAIT FOR KEY THEN DISPLAY FIFO CONTENTS |
|||
CALL PRTSTRD |
|||
DB "\r\nPress keys on pad (console key to end)...$" |
|||
; |
|||
; CLEAR BUFFER |
|||
LD HL,DSPBUF |
|||
LD A,$10 |
|||
LD B,8 |
|||
M1: |
|||
LD (HL),A |
|||
INC HL |
|||
DJNZ M1 |
|||
; |
|||
; DISPLAY INIITAL BUFFER |
|||
LD B,8 |
|||
LD C,0 |
|||
LD HL,DSPBUF |
|||
CALL DSKY_PUTENCSTR |
|||
; |
|||
M2: |
|||
CALL CST ; CONSOLE STATUS |
|||
JR NZ,M4 ; ABORT IF KEY PRESSED |
|||
CALL DSKY_STAT |
|||
AND $3F ; DUMP 2 HIGH BITS |
|||
JR Z,M2 ; LOOP IF STATUS ZERO |
|||
CALL PRTSTRD |
|||
DB "\r\nFIFO status=$" |
|||
CALL PRTHEXBYTE |
|||
AND $0F ; ISOLATE THE CUR FIFO LEN |
|||
JR Z,M2 ; LOOP IF NOTHING THERE |
|||
PUSH AF |
|||
LD A,DSKY_CMD_FIFO |
|||
CALL DSKY_CMD |
|||
POP BC ; B := CUR FIFO LEN |
|||
CALL PRTSTRD |
|||
DB ", key code(s)=$" |
|||
|
|||
M3: |
|||
PUSH BC |
|||
CALL DSKY_DIN |
|||
CALL PRTHEXBYTE |
|||
CALL PC_SPACE |
|||
; SHIFT BUFFER |
|||
LD HL,DSPBUF+5 |
|||
LD DE,DSPBUF+7 |
|||
LD BC,6 |
|||
LDDR |
|||
; PUT NEW VALUE AT START |
|||
PUSH AF |
|||
RRCA |
|||
RRCA |
|||
RRCA |
|||
RRCA |
|||
AND $0F |
|||
LD (DSPBUF),A |
|||
POP AF |
|||
PUSH AF |
|||
AND $0F |
|||
LD (DSPBUF+1),A |
|||
; UPDATE THE DISPLAY |
|||
LD B,8 |
|||
LD C,0 |
|||
LD HL,DSPBUF |
|||
CALL DSKY_PUTENCSTR |
|||
POP AF |
|||
; TOGGLE LED, KEY CODE: --CCCRRR |
|||
PUSH AF |
|||
AND $07 ; ISOLATE ROW |
|||
LD B,A ; SAVE IN B |
|||
POP AF |
|||
RRCA |
|||
RRCA |
|||
RRCA |
|||
AND $07 ; ISOLATE COLUMN |
|||
LD C,A ; SAVE IN C |
|||
CALL DSKY_TOGLED ; TOGGLE LED AT ROW/COL |
|||
POP BC ; INSIDE LOOP COUNTER |
|||
DJNZ M3 |
|||
JP M2 ; LOOP |
|||
M4: |
|||
CALL CIN ; DUMP PENDING CONSOLE KEY |
|||
; |
|||
; DANCING LIGHTS |
|||
CALL PRTSTRD |
|||
DB "\r\nDance, Baby, Dance (console key to end)...$" |
|||
; |
|||
LD E,$01 ; STARTING VALUE |
|||
M5: |
|||
CALL CST ; CONSOLE STATUS |
|||
JR NZ,M8 ; ABORT IF KEY PRESSED |
|||
LD B,12 ; NUMBER OF BYTES |
|||
LD C,$00 ; STARTING LOCATION (BYTE) |
|||
M6: |
|||
LD A,E |
|||
CALL DSKY_PUTBYTE |
|||
INC C ; NEXT LOCATION |
|||
DJNZ M6 ; INNER LOOP FOR ALL BYTES |
|||
RLC E ; ROTATE THE VALUE |
|||
LD B,0 ; DELAY LOOP |
|||
M7: |
|||
CALL DLY64 |
|||
DJNZ M7 |
|||
JR M5 ; REPEAT OUTER LOOP |
|||
M8: |
|||
CALL CIN ; DUMP PENDING CONSOLE KEY |
|||
; |
|||
EXIT: |
|||
; |
|||
; CLEAR ALL |
|||
LD A,DSKY_CMD_CLR |
|||
CALL DSKY_CMD |
|||
; |
|||
; GOODBYE |
|||
CALL PRTSTRD |
|||
DB "\r\nThank you, please call again\r\n$" |
|||
; |
|||
; CLEAN UP AND RETURN TO OS |
|||
LD SP,(STACKSAV) |
|||
; |
|||
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 |
|||
; |
|||
; ; DIAGNOSTIC |
|||
; LD A,'W' |
|||
; CALL COUT |
|||
; |
|||
DSKY_PPIWR1: |
|||
; |
|||
POP AF |
|||
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 |
|||
; |
|||
; |
|||
; |
|||
DSKY_INIT: |
|||
; RESET DSKY |
|||
CALL DSKY_RES |
|||
; SET CLOCK SCALER TO 20 |
|||
LD A,DSKY_CMD_CLK | DSKY_PRESCL |
|||
CALL DSKY_CMD |
|||
LD A,%00001000 ; dan |
|||
CALL DSKY_CMD |
|||
; |
|||
RET |
|||
; |
|||
; HARDWARE RESET 8279 BY PULSING RESET LINE |
|||
; |
|||
DSKY_RES: |
|||
; |
|||
; 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 |
|||
CALL DSKY_PPIIDLE |
|||
RET |
|||
; |
|||
; 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_STAT: |
|||
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 ADDHLA |
|||
LD A,(HL) |
|||
XOR $FF |
|||
PUSH BC |
|||
CALL DSKY_DOUT |
|||
POP BC |
|||
DJNZ DSKY_PUTENCSTR1 |
|||
RET |
|||
; |
|||
; TOGGLE LED AT ROW (B) AND COLUMN (C) |
|||
; |
|||
DSKY_TOGLED: |
|||
; CONVERT B (ROW) TO BIT VALUE |
|||
XOR A |
|||
INC B |
|||
SCF |
|||
DSKY_TOGLED1: |
|||
RLA |
|||
DJNZ DSKY_TOGLED1 |
|||
LD B,A |
|||
; LED COLS START AT 8 |
|||
LD A,8 |
|||
ADD A,C |
|||
LD C,A |
|||
; FLIP THE BIT |
|||
CALL DSKY_GETBYTE ; GET CURRENT COL BITMAP |
|||
XOR B ; FLIP DESIRED BIT |
|||
CALL DSKY_PUTBYTE ; WRITE VLAUE BACK TO COLUMN |
|||
RET |
|||
; |
|||
; READ AND PRINT DISPLAY RAM (RAW BYTES) |
|||
; |
|||
DSKY_READ: |
|||
CALL PRTSTRD |
|||
DB "\r\nRead display RAM: $" |
|||
LD B,16 ; 16 BYTES |
|||
LD C,0 ; POSITION 0 |
|||
LD HL,DSPBUF |
|||
CALL DSKY_GETSTR |
|||
LD B,$10 |
|||
LD HL,DSPBUF |
|||
DSKY_READ1: |
|||
LD A,(HL) |
|||
INC HL |
|||
CALL PC_SPACE |
|||
CALL PRTHEXBYTE |
|||
DJNZ DSKY_READ1 |
|||
RET |
|||
; |
|||
; OUTPUT CHARACTER FROM A |
|||
; |
|||
COUT: |
|||
PUSH AF ; |
|||
PUSH BC ; |
|||
PUSH DE ; |
|||
PUSH HL ; |
|||
|
|||
IF BDOS |
|||
LD C,2 ; BDOS FUNC: CONSOLE OUTPUT |
|||
LD E,A ; CHARACTER TO E |
|||
CALL $0005 ; CALL BDOS |
|||
ELSE |
|||
LD C,A |
|||
COUT1: |
|||
IN A,(UART + 05H) ; READ LINE STATUS REGISTER |
|||
AND 20H ; TEST IF UART IS READY TO SEND |
|||
JP Z,COUT1 ; IF NOT REPEAT |
|||
LD A,C ; GET TO ACCUMULATOR |
|||
OUT (UART),A ; THEN WRITE THE CHAR TO UART (UART0 = 068h + $00) |
|||
ENDIF |
|||
|
|||
POP HL ; |
|||
POP DE ; |
|||
POP BC ; |
|||
POP AF ; |
|||
RET ; DONE |
|||
; |
|||
; INPUT CHARACTER TO A |
|||
; |
|||
CIN: |
|||
PUSH BC ; |
|||
PUSH DE ; |
|||
PUSH HL ; |
|||
IF BDOS |
|||
CIN1: |
|||
LD C,6 ; BDOS FUNC: DIRECT CONSOLE I/O |
|||
LD E,$FF ; SET FOR INPUT |
|||
CALL $0005 ; CALL BDOS, CHARACTER TO A |
|||
OR A ; CHECK FOR NO CHAR, $00 |
|||
JR Z,CIN1 ; LOOP TIL WE GET A CHAR |
|||
ELSE |
|||
CIN1: |
|||
CALL CST ; IS A CHAR READY TO BE READ FROM UART? |
|||
CP 00H ; |
|||
JP Z,CIN1 ; NO? TRY AGAIN |
|||
IN A,(UART) ; YES? READ THE CHAR FROM THE UART (UART0 = 068h + $00) |
|||
ENDIF |
|||
POP HL ; |
|||
POP DE ; |
|||
POP BC ; |
|||
RET ; DONE |
|||
; |
|||
; RETURN INPUT STATUS IN A (0 = NO CHAR, !=0 CHAR WAITING) |
|||
; |
|||
CST: |
|||
PUSH BC ; |
|||
PUSH DE ; |
|||
PUSH HL ; |
|||
IF BDOS |
|||
LD C,$0B ; BDOS FUNC: GET CONSOLE STATUS |
|||
CALL $0005 ; CALL BDOS |
|||
OR A ; SET FLAGS |
|||
ELSE |
|||
; CONSOLE STATUS, RETURN 0FFH IF CHARACTER READY, 00H IF NOT |
|||
IN A,(UART + 05H) ; READ LINE STATUS REGISTER (UART5 = 068h + $05) |
|||
AND 01H ; TEST IF DATA IN RECEIVE BUFFER |
|||
; IS THERE A CHAR READY? 0=NO, 1=YES |
|||
JP Z,CST1 ; |
|||
LD A,0FFH ; YES, PUT 0FFh IN A AND RETURN |
|||
CST1: ; |
|||
; NO, LEAVE 000h IN A AND RETURN |
|||
ENDIF |
|||
POP HL ; |
|||
POP DE ; |
|||
POP BC ; |
|||
RET ; DONE |
|||
; |
|||
; WAIT FOR A KEY |
|||
; |
|||
WAITKEY: |
|||
PUSH AF |
|||
CALL PRTSTRD |
|||
DB ", press a key to continue...$" |
|||
CALL CIN |
|||
POP AF |
|||
RET |
|||
; |
|||
; |
|||
; |
|||
USEDELAY: EQU FALSE |
|||
INCLUDE "./SOFTWARE/util.asm" |
|||
; |
|||
; STORAGE |
|||
; |
|||
DSKY_PPIX_VAL: DB 0 |
|||
; |
|||
DSPBUF: DS 16,0 |
|||
; |
|||
PAT1: DB $01,$02,$04,$08,$10,$20,$40,$80 |
|||
DB $11,$22,$44,$88,$FF,$FF,$FF,$FF |
|||
PAT1LN: EQU $ - PAT1 |
|||
PAT2: DB $01,$03,$07,$0F,$1F,$3F,$7F,$FF |
|||
DB $11,$33,$77,$FF,$00,$00,$00,$00 |
|||
PAT2LN: EQU $ - PAT2 |
|||
PAT3: DB $FE,$FD,$FB,$F7,$EF,$DF,$BF,$7F |
|||
DB $77,$BB,$DD,$EE,$00,$00,$00,$00 |
|||
PAT3LN: EQU $ - PAT3 |
|||
BLANK: DB $00,$00,$00,$00,$00,$00,$00,$00 |
|||
DB $00,$00,$00,$00,$00,$00,$00,$00 |
|||
BLNKLN: EQU $ - BLANK |
|||
HEX1: DB $0,$1,$2,$3,$4,$5,$6,$7 |
|||
HEX1LN: EQU $ - HEX1 |
|||
HEX2: DB $8,$9,$A,$B,$C,$D,$E,$F |
|||
HEX2LN: EQU $ - HEX2 |
|||
; |
|||
HEXMAP: |
|||
; '0' '1' '2' '3' '4' '5' '6' '7' |
|||
DB $3F, $06, $5B, $4F, $66, $6D, $7D, $07 |
|||
; '8' '9' 'A' 'B' 'C' 'D' 'E' 'F' |
|||
DB $7F, $67, $77, $7C, $39, $5E, $79, $71 |
|||
; |
|||
DB $00 |
|||
; |
|||
STACKSAV: DW 0 |
|||
STACKSIZ: EQU $100 ; WE ARE A STACK PIG |
|||
DS STACKSIZ,0 |
|||
STACK: EQU $ |
|||
; |
|||
END |
|||
Loading…
Reference in new issue