; Orao Program Initialization Code for C02 programs

;System Specific ASCII Key Mappings
DELKEY  EQU $1F     ;Left Arrow
ESCKEY  EQU $03     ;Ctrl-C
RTNKEY  EQU $0D     ;Carriage Return
NULKEY  EQU $00     ;Null

;Zero Page Locations
SRCLO   EQU $30     ;Source String/Array Pointer
SRCHI   EQU $31
DSTLO   EQU $32     ;Destination String/Array Pointer
DSTHI   EQU $33
BFRLO   EQU $34     ;Work Buffer Pointer
BFRHI   EQU $35

STKSAV  EQU $36     ;Stack Pointer Storage
RDSEED  EQU $37     ;Pseudo-RANDOM Seed
RANDOM  EQU $38     ;Pseudo-RANDOM Number Storage
TEMP0   EQU $3A     ;Temporary Storage
TEMP1   EQU $3B
TEMP2   EQU $3C
TEMP3   EQU $3D

BLKBGN  EQU $40     ;Block Start Address
BLKEND  EQU $42     ;Block End Address
BLKPTR  EQU $44     ;Block Pointer
BLKLEN  EQU $46     ;Block Segment Length     

STKSLO  EQU $48     ;Stack Start Address
STKSHI  EQU $49
STKELO  EQU $4A     ;Stack End Address
STKEHI  EQU $4B
STKLO   EQU $4C     ;Stack Pointer
STKHI   EQU $4D

        ORG $1000   ;Program Start Address

START:  TSX         ;Save Stack Pointer
        STX STKSAV
        JMP MAIN    ;Execute Program


;Exit Program and Return to Operating System or Monitor
EXIT    LDX STKSAV  ;Restore Stack Pointer
        TXS 
        RTS         ;and Return to Caller
        
RESET   EQU $FFA3   ;Alias to WARMST (Monitor)

;Poll Character from Keyboard
POLKEY: JSR $E5B0   ;Scan Keyboard
        BCC POLKEX  ;If No Key Pressed
        LDA #NULKEY ;Return NUL
POLKEX: RTS

;Read Character from Console
GETKEY  EQU $E500   ;Alias to INCHR function

;Wait for Character from Console
GETCHR  EQU GETKEY  ;Alias to GETKEY

;Print Character to Screen
PUTCHR  EQU $E762   ;Alias to OUTCH Routine

;Delete Previous Character
DELCHR  EQU $F1F2   ;Alias to BCKSPC Routine

;Advance Cursor to Next line
NEWLIN  EQU $E7F6   ;Aliased to CRLF Routine

;Print Byte as Two-Digit Hex Number to Console
PRBYTE  EQU $E803

;Print Low Nybble as Hex Digit to Console
PRHEX   EQU $E80F

        INCLUDE "../include/putstr.a02" ;PUTSTR Routine
