Код:
; syseq.mae
; GP Equates
; Atari Equates
SAVMSC = $58
SDLSTL = $230
SKCTL = $d20f ; Silence=3
MEMTOP = $02e5
MEMLO = $02e7
; Atari Vectors
RUNAD = $02e0
CIOV = $e456
; Atari Varyables
ROWCRS = $54 ; Byte
COLCRS = $55 ; Word
; Atari Tokens
EOL = $9b
EOF = $88
CLR = $7d
CUP = $1c ; To prev line
CDN = $1d ; To next line
; IOCB Structure
iocb .or $0340
;
ICHID .ds 1
ICDNO .ds 1
ICCOM .ds 1 ; * Cmd
ICSTA .ds 1
BFADR .ds 2 ; * BufAdr
PTADR .ds 2 ; Hnd (adr-1) PutChar
BFLEN .ds 2 ; * BufLen
ICAX1 .ds 1 ; * Mod
ICAX2 .ds 1 ; * Opt
ICAX3 .ds 1
ICAX4 .ds 1
ICAX5 .ds 1
ICAX6 .ds 1
; IOCB Offsets
iocb0 = $00
iocb1 = $10
iocb2 = $20
iocb3 = $30
iocb4 = $40
iocb5 = $50
iocb6 = $60
iocb7 = $70
; CIO Commands
COPEN = $03
GTREC = $05 ;Get TEXT Record
GTBYT = $07 ;GeT Byte
PTREC = $09 ;PuT TEXT Record
PTBYT = $0b ;PuT Byte
CCLSE = $0c
CSTAT = $0d
; Command Mode
OREAD = $04
OPDIR = $06
OWRIT = $08
OPAPP = $09
OPUPD = $0c
; Command Options
OSHOR = $00
OLONG = $80
; >>> EOF <<<
- - - Добавлено - - -
Код:
; macro.mae
; GP Macros
; Move_Immediate_Byte
; form: mib <byt> <loc>
!!!mib .md
lda #:1
sta :2
.me
; Move_Immediate_Word
; form: miw <wrd> <loc>
!!!miw .md
lda #>:1
sta 1+:2
lda #<:1
sta :2
.me
; Move_Absolute_Byte
; form: mab <loc1> <Loc2>
!!!mab .md
lda :1
sta :2
.me
; Move_Absolute_Word
; form: maw <loc1> <loc2>
!!!maw .md
lda 1+:1
sta 1+:2
lda :1
sta :2
.me
; CIO Macros
; Set IOCB Offset
; form: ofs <ch>
!!!ofs .md
ldx #iocb:1
.me
; Set Buffer Adress
; form: bfa <lbl>
!!!bfa .md
lda #>:1
sta 1+BFADR,x
lda #<:1
sta BFADR,x
.me
; Filespec As String
; form: fas <"str",EOL>
!!!fas .md
jmp ?L
?F .by :1
?L lda #>?F
sta 1+BFADR,x
lda #<?F
sta BFADR,x
.me
; Set BuFfer Length
; form: bfl <len>
!!!bfl .md
lda #>:1
sta 1+BFLEN,x
lda #<:1
sta BFLEN,x
.me
; CHecK Status
; form: chk <iferr-adr>
!!!chk .md
tya
bmi :1
.me
; TERM Macros
; Set X,Y Coords
; form: pos <x> <y>
!!!pos .md
lda #<:1
sta COLCRS
lda #>:1
sta COLCRS+1
lda #:2
sta ROWCRS
.me
; >>> EOF <<<
- - - Добавлено - - -
Код:
; iolib.mae
; Subroutines
; call jsr ...
; For all subs:
; buffer & buflen
; must be defined in main code!!!
;
; X = IOCB Offset
; A = Mode (ICAX1)
; Y = Option (ICAX2)
; On exit:
; Y = status
close
lda #CCLSE
jmp exec
open
; bufer and buflen
; to be defined in Main!
sta ICAX1,x
tya
sta ICAX2,x
lda #COPEN
jmp exec
input
; bufer and buflen
; to be defined in Main!
lda #GTREC
jmp exec
print
; bufer and buflen
; to be defined in Main!
lda #PTREC
jmp exec
getby
; bufer and buflen
; to be defined in Main!
lda #GTBYT
jmp exec
putby
; bufer and buflen
; to be defined in Main!
lda #PTBYT
jmp exec
putch
; X = IOCB offset
; A holds <char>
tay
lda PTADR+1,x
pha
lda PTADR,x
pha
tya
rts
exec
; A holds Command Byte
sta ICCOM,x
jmp CIOV
; >>> EOF <<<