mirror of
https://github.com/a2geek/jewel-of-kaldun.git
synced 2025-03-20 07:29:34 +00:00
336 lines
8.4 KiB
ArmAsm
Executable File
336 lines
8.4 KiB
ArmAsm
Executable File
********************************
|
|
* Input/Output Routines *
|
|
* Uses: IO.MAC *
|
|
********************************
|
|
|
|
* External references
|
|
; jewel.of.kaldun.s
|
|
DATA EXT
|
|
|
|
********************************
|
|
* Turn on text screen. *
|
|
********************************
|
|
|
|
TEXT ENT
|
|
STA $C056
|
|
STA $C054
|
|
STA $C051
|
|
RTS
|
|
|
|
********************************
|
|
* Routine to pause for RETURN *
|
|
* to be pressed. *
|
|
********************************
|
|
|
|
GETRET ENT
|
|
LDA #23
|
|
STA TLINE
|
|
JSR TEXTADDR
|
|
LDA ESCABORT
|
|
BMI :ESCCR
|
|
CENTER GRSTR
|
|
JMP :XXX
|
|
:ESCCR MOVB #0;TTAB
|
|
PRINT ESCCRSTR
|
|
:XXX JSR M:GETKEY
|
|
BIT ESCABORT
|
|
BPL :YYY
|
|
CMP #$9B ; ESCAPE
|
|
BEQ :EXIT
|
|
:YYY CMP #$8D ; RETURN
|
|
BNE :XXX
|
|
:EXIT LDA #23
|
|
STA TLINE
|
|
JSR TEXTADDR
|
|
LDA KEYBOARD
|
|
CMP #$9B
|
|
BNE :LEAVE
|
|
PLA ; CLEAR STACK OF ADDRESS
|
|
PLA
|
|
:LEAVE LDA #%00000000
|
|
STA ESCABORT
|
|
STA KEYSTROB ; clear keypress
|
|
JMP CLINE
|
|
ESCABORT HEX 00
|
|
GRSTR ASC "Press <RETURN> to continue"00
|
|
ESCCRSTR ASC "<RETURN> to continue or <ESCAPE> to stop"00
|
|
|
|
********************************
|
|
* Routine to wait for a Y or *
|
|
* a N. *
|
|
********************************
|
|
|
|
GETYN JSR M:GETKEY
|
|
CMP #"Y"
|
|
BEQ :YES
|
|
CMP #"y"
|
|
BEQ :YES
|
|
CMP #"n"
|
|
BEQ :NO
|
|
CMP #"N"
|
|
BNE GETYN
|
|
:NO SEC
|
|
RTS
|
|
:YES CLC
|
|
RTS
|
|
|
|
********************************
|
|
* Routine to center a string. *
|
|
********************************
|
|
|
|
CSTRING ENT
|
|
LDY #0
|
|
:0 LDA (DATA),Y
|
|
BEQ :FINISH
|
|
CMP #$8D
|
|
BEQ :FINISH
|
|
INY
|
|
BNE :0
|
|
:FINISH TYA
|
|
LSR
|
|
STA TEMP
|
|
SEC
|
|
LDA #20
|
|
SBC TEMP
|
|
STA TTAB
|
|
JSR PRSTR
|
|
|
|
********************************
|
|
* Print a carriage return. *
|
|
********************************
|
|
|
|
PRCR INC TLINE
|
|
JSR TEXTADDR
|
|
LDY #0
|
|
STY TTAB
|
|
LDA TLINE
|
|
CMP #24
|
|
BCC END1
|
|
STY TLINE
|
|
END1 RTS
|
|
|
|
********************************
|
|
* The following routine(s) *
|
|
* handle printing with special *
|
|
* control characters: *
|
|
* *
|
|
* ^I ($89) Inverse mode *
|
|
* ^N ($8E) Normal mode *
|
|
* ^M ($8D) Carriage Return *
|
|
* ^@ ($80) Print Hex number *
|
|
* that is stored *
|
|
* at the pointer *
|
|
* location in Dec. *
|
|
* ^A ($81) Print Hex WORD *
|
|
* that is stored *
|
|
* at the pointer *
|
|
* location in Dec. *
|
|
* ^B ($82) To clear bottom *
|
|
* 3 lines. *
|
|
* ^C ($83) To center the *
|
|
* following line *
|
|
* of text on scrn. *
|
|
* %00xxxxxx Htab + 1 *
|
|
* %01xxxxxx Vtab *
|
|
* *
|
|
* All other characters lower *
|
|
* than a SPACE ($A0) are *
|
|
* ignored. *
|
|
********************************
|
|
|
|
* MASK byte and PTR increment routine:
|
|
|
|
MASK HEX FF
|
|
DATAINC INC DATA
|
|
BNE END2
|
|
INC DATA+1
|
|
END2 RTS
|
|
|
|
* This is the Print routine:
|
|
|
|
PRSTR ENT
|
|
LDY #0
|
|
LDA (DATA),Y
|
|
BEQ END2
|
|
BMI :0
|
|
CMP #%00111111
|
|
BGE :VTAB
|
|
STA TTAB
|
|
DEC TTAB
|
|
:NEXT JSR DATAINC
|
|
JMP PRSTR
|
|
:VTAB AND #%00111111
|
|
:V0 STA TLINE
|
|
JSR TEXTADDR
|
|
BCC :NEXT
|
|
LDA #0
|
|
BEQ :V0
|
|
:0 CMP #$89
|
|
BNE :1
|
|
LDA #%00111111
|
|
:MASK STA MASK
|
|
BNE :NEXT
|
|
:1 CMP #$8E
|
|
BNE :2
|
|
LDA #%11111111
|
|
BNE :MASK
|
|
:2 CMP #$8D
|
|
BNE :3
|
|
:NEWLINE JSR PRCR
|
|
JMP :NEXT
|
|
:3 CMP #$80
|
|
BNE :4
|
|
JSR DATAINC
|
|
LDA (DATA),Y
|
|
STA PTR
|
|
JSR DATAINC
|
|
LDA (DATA),Y
|
|
STA PTR+1
|
|
JSR CONVERT
|
|
JMP :NEXT
|
|
:4 CMP #$83
|
|
BNE :5
|
|
LDY #1 ; pass #$83
|
|
:40 LDA (DATA),Y
|
|
CMP #$A0
|
|
BLT :41
|
|
INY
|
|
BNE :40
|
|
:41 TYA
|
|
LSR
|
|
STA TEMP
|
|
SEC
|
|
LDA #20
|
|
SBC TEMP
|
|
STA TTAB
|
|
JMP :NEXT
|
|
:5 CMP #$82
|
|
BNE :6
|
|
JSR CBOT3
|
|
JMP :NEXT
|
|
:6 CMP #$81
|
|
BNE :7
|
|
JSR DATAINC
|
|
LDA (DATA),Y
|
|
STA PTR
|
|
JSR DATAINC
|
|
LDA (DATA),Y
|
|
STA PTR+1
|
|
JSR CONVWORD
|
|
JMP :NEXT
|
|
:7 CMP #$A0
|
|
BLT :NEXTPTR
|
|
BIT AUTOCAPS
|
|
BPL :GO
|
|
JSR CHARCAPS ; capitalize letter
|
|
:GO LDY TTAB
|
|
AND MASK
|
|
STA (TPTR),Y
|
|
STA SPEAKER
|
|
INY
|
|
STY TTAB
|
|
CPY #40
|
|
BLT :NEXTPTR
|
|
LDY #0
|
|
STY TTAB
|
|
:NEXTPTR JMP :NEXT
|
|
AUTOCAPS HEX 00 ; default: Mixed mode
|
|
|
|
********************************
|
|
* CLINE clears the current *
|
|
* line pointed to by TPTR. *
|
|
********************************
|
|
|
|
CLINE LDY #40
|
|
LDA #$A0
|
|
:0 STA (TPTR),Y
|
|
DEY
|
|
BPL :0
|
|
RTS
|
|
|
|
********************************
|
|
* CLRMID clears middle portion *
|
|
* of text screen. Lines 1-22. *
|
|
* (line 0 = vtab 1) *
|
|
********************************
|
|
|
|
CLRMID ENT
|
|
LDA #22
|
|
STA TLINE
|
|
:0 JSR TEXTADDR
|
|
JSR CLINE
|
|
DEC TLINE
|
|
BNE :0
|
|
RTS
|
|
|
|
********************************
|
|
* CBOT3 clears the bottom *
|
|
* three (3) lines of the text *
|
|
* screen. *
|
|
********************************
|
|
|
|
CBOT3 ENT
|
|
LDA #21
|
|
BNE CLRSCRN0
|
|
|
|
********************************
|
|
* Clears the text screen. *
|
|
********************************
|
|
|
|
CLRSCRN ENT
|
|
LDA #0
|
|
CLRSCRN0 STA TLINE
|
|
:0 JSR TEXTADDR
|
|
BCS END0
|
|
JSR CLINE
|
|
INC TLINE
|
|
JMP :0
|
|
|
|
********************************
|
|
* TEXTADDR uses the lookup *
|
|
* tables to find the address *
|
|
* of the line number stored in *
|
|
* TLINE. *
|
|
********************************
|
|
|
|
TEXTADDR ENT
|
|
LDA TLINE
|
|
CMP #24
|
|
BGE END0
|
|
TAY
|
|
LDA TEXTLOW,Y
|
|
STA TPTR
|
|
LDA TEXTHIGH,Y
|
|
STA TPTR+1
|
|
CLC
|
|
END0 RTS
|
|
|
|
********************************
|
|
* The lookup tables for the *
|
|
* text screen: *
|
|
********************************
|
|
|
|
TEXTLOW HEX 0080008000800080
|
|
HEX 28A828A828A828A8
|
|
HEX 50D050D050D050D0
|
|
TEXTHIGH HEX 0404050506060707
|
|
HEX 0404050506060707
|
|
HEX 0404050506060707
|
|
|
|
********************************
|
|
* Sets inverse status line and *
|
|
* clears last three lines of *
|
|
* text screen. *
|
|
********************************
|
|
|
|
STATLINE PRINT STATTEXT
|
|
JSR CBOT3
|
|
LDA #21
|
|
STA TLINE
|
|
JSR TEXTADDR
|
|
RTS
|
|
STATTEXT HEX 015489 ; htab 1:vtab 21:inverse
|
|
ASC " KY HP XP GP"
|
|
HEX 8E00 ; normal
|
|
|