mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-11-25 21:33:44 +00:00
114 lines
3.4 KiB
Plaintext
114 lines
3.4 KiB
Plaintext
; Program initialization code for Oric-1
|
|
|
|
;System Specific ASCII Key Mappings
|
|
DELKEY EQU $7F ;Delete/Backspace Key (Delete)
|
|
ESCKEY EQU $1B ;Escape/Stop Key (Escape)
|
|
RTNKEY EQU $0D ;Return/Enter Key ($0D=Carriage Return)
|
|
|
|
;Zero Page Locations
|
|
SRCLO EQU $10 ;Source String Pointer (stdio.asm)
|
|
SRCHI EQU $11
|
|
DSTLO EQU $12 ;Destination String Pointer (string.asm)
|
|
DSTHI EQU $13
|
|
BFRLO EQU $14 ;Work Buffer Pointer
|
|
BFRHI EQU $15
|
|
|
|
TEMP0 EQU $16 ;Temporary Storage
|
|
TEMP1 EQU $17
|
|
TEMP2 EQU $18
|
|
TEMP3 EQU $19
|
|
|
|
RDSEED EQU $1A ;Pseudo-RANDOM Seed
|
|
RANDOM EQU $1B ;Pseudo-RANDOM Number Storage
|
|
|
|
; EQU $1C ;Unused
|
|
; EQU $1D ;Unused
|
|
|
|
BLKLEN EQU $1F ;Block Length
|
|
BLKSLO EQU $20 ;Block Start Address
|
|
BLKSHI EQU $21
|
|
BLKELO EQU $22 ;Block End Address
|
|
BLKEHI EQU $23
|
|
|
|
STKSLO EQU $24 ;Stack Start LSB
|
|
STKSHI EQU $25 ;Stack Start MSB
|
|
STKELO EQU $26 ;Stack End LSB
|
|
STKEHI EQU $27 ;Stack End MSB
|
|
|
|
|
|
;Oric-1 Tape images have the file extension ".tap"
|
|
;and have the following header prepended to the code
|
|
; $16,$16,$16, $16 Tape Syncronization Pattern
|
|
; $24 Tape Syncronization Byte
|
|
; $00,$00 Filler Bytes
|
|
; $00 Basic Program
|
|
; $00 No Autostart ($80 for Autostart)
|
|
; $xx,$xx MSB, LSB of End Address
|
|
; $05,$01 MSB, LSB of Start Address
|
|
; $00 Filler Byte
|
|
; "filename" Up to 16 ASCII Characters
|
|
; $00 Strint Terminator
|
|
|
|
;The End Address is actually one higher than the last
|
|
;byte of the Basic program and the first byte of Basic
|
|
;variable space. so the compiled program need to have
|
|
;one dummy byte added to the end.
|
|
|
|
ORG $0501 ;Basic Program Start Address
|
|
|
|
BASIC: .DC $0C,$05 ;Address of Next Line
|
|
.DC $00,$00 ;Basic Line Number (0)
|
|
.DC $BF ;Token for Basic Call Command
|
|
.DC $20 ;Space
|
|
.DC "1294" ;Address of START Label
|
|
.DC $00 ;End of Line
|
|
.DC $00,$00 ;End of Program Marker
|
|
|
|
START: LDA #127 ;Set Caps Lock Off
|
|
STA $020C
|
|
LDA #$0B ;Turn Cursor On, Keyclick Off
|
|
STA $026A ;and Protect Columns 0 & 1
|
|
JMP MAIN ;Execute Program
|
|
|
|
;Poll Character from Keyboard
|
|
POLKEY: INC RDSEED ;Cycle the Random Seed
|
|
JMP $E905 ;Execute GETORKB
|
|
|
|
;Read Character from Console
|
|
GETKEY EQU POLKEY ;Aliased to POLKEY
|
|
|
|
;Wait for Character from Console
|
|
GETCHR: JSR GETKEY ;Calls GETKEY
|
|
BEQ GETCHR ; until a non-zero is returned
|
|
RTS
|
|
|
|
;Delete Previous Character
|
|
DELCHR: LDA #DELKEY ;Load Delete Character
|
|
BNE PUTCHR ;and Print to Screem
|
|
|
|
;Advance Cursor to Next line
|
|
NEWLIN EQU $CB9F ;Basic NEWLINE Routine ($CBF0 for ATMOS)
|
|
; LDA #$0D ;Load Carriage Return
|
|
; JSR PUTCHR ;and Print It
|
|
; LDA #$0A ;Load Line Feed and fall through to PRCHR
|
|
|
|
;Print Character to Screen
|
|
PUTCHR: TAX ;Transfer Character to X Register
|
|
JMP $F409 ;Execute VDU Routine
|
|
|
|
;Print String to Screen
|
|
PUTSTR: TXA ;Copy LSB to A6
|
|
JMP $CCB0 ;Execute BASIC String Print Routine
|
|
|
|
;Get End of Free Memory
|
|
RAMTOP: LDX $A6 ;Load HIMEM LSB
|
|
LDY $A7 ;Load HIMEM MSB
|
|
RTS
|
|
|
|
;Exit Program and Return to Operating System or Monitor
|
|
EXIT: LDA #255 ;Set Caps Lock On
|
|
STA $020C
|
|
JMP $C003 ;BASIC Warm Start
|
|
|
|
INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routines
|