home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 1
/
crawlyvol1.bin
/
program
/
compiler
/
nasm20b
/
libinc
/
header
/
cio.h65
< prev
next >
Wrap
Text File
|
1993-01-19
|
4KB
|
193 lines
.if .not .def _CIO_
_CIO_ = 1
.if .not .def _SYSTEM_
.include #system
.endif
.if .not .def _MACROS_
.include #macros
.endif
@READ = 4
@WRITE = 8
@APPEND = 9
@UPDATE = @WRITE + @READ
@S_TXTWIN = 16
@S_NOCLEAR = 32
; -------------------------------------------------------------
; For the macro...
; CH_X channel[,select]
; will get us
; channel in X
; -------------------------------------------------------------
.macro ch_x
.if %0 = 1 .or .not [%2 & @special] ;; this works as in `C`
.if %0 = 2 .and .not [%2 & @p1]
ldx #%1
lda _op_tab,x
tax
.else
.if %1 >= 8
ldx #%1
.else
ldx #%1*$10
.endif
.endif
.endif
.endm
; -------------------------------------------------------------
; For the macro...
; OPEN channel,aux1,aux2,filespec[,select]
; will get us
; channel in X
; -------------------------------------------------------------
.macro open
@3 .= @p1 ! @p2 ! @p3 ! @p4 ! @s4
.if %0 = 5
@3 .= %5
.endif
ch_x %1,@3
@moke_x %2,icax1,[@3 & @p2] / @p2
@moke_x %3,icax2,[@3 & @p3] / @p3
.if @3 & @s4
jmp *+%4+4
.byte %$4,0
@dmoad *-%4-1,@p1
.else
@dmoad %4,[@3 & @p4] / @p4
.endif
jsr open
.endm
; ------------------------------------------------------------
; For the macro...
; CLOSE channel[,select]
; will get us
; channel in X
; ------------------------------------------------------------
.macro close
@3 .= @p1 ! @special
.if %0 = 2
@3 .= %2
.endif
ch_x %1,@3
jsr close
.endm
; -------------------------------------------------------------
; Generic macro for calls of the form
; channel,buffer,len[,select]
; Like INPUT PRINT BPUT BGET
; Usage: IO channel,buffer,len,select,jumplabel
; Default assumption: channel in X everything POKEd
; -------------------------------------------------------------
.macro _io
ch_x %1,%4
@dmoke_x %3,icbll,[%4 & @p3] / @p3
@dmoad %2,[%4 & @p2] / @p2
jsr %5
.endm
; -------------------------------------------------------------
; For the macros...
; BPUT channel,buffer,len[,select]]
; BGET channel,buffer,len[,select]
; PRINT channel,buffer[,len[,select]]
; INPUT channel,buffer,len[,select]
; The ommission of len on PRINT is only recommended
; for quick'n dirty hacks, since your wasting 3 bytes.
; Assumption:
; channel in X everything POKEd
; -------------------------------------------------------------
.macro bput
@3 .= @p1 ! @p2 ! @p3
.if %0 = 4
@3 .= %4
.endif
_io %1,%2,%3,@3,bput
.endm
.macro bget
@3 .= @p1 ! @p2 ! @p3
.if %0 = 4
@3 .= %4
.endif
_io %1,%2,%3,@3,bget
.endm
.macro print
.if %0=1
putc %1,155
.else
@3 .= @p1 ! @p2 ! @p3
.if %0 > 3
@3 .= %4
.else
.if %0 = 2
@3 .= @3 ! @s2
.endif
.endif
.if @3 & @s2
jmp *+%2+3
.byte %$2
_io %1,*-%2,%2,[@3 & @special] ! [@3 & @p1] ! @p2 ! @p3,print
.else
_io %1,%2,%3,@3,print
.endif
.endif
.endm
.macro input
@3 .= @p1 ! @p2 ! @p3
.if %0 = 4
@3 .= %4
.endif
_io %1,%2,%3,@3,input
.endm
; -------------------------------------------------------------
; For the macro...
; XIO command,channel,aux1,aux2,buffer[,select]
; will get us
; channel in X
; -------------------------------------------------------------
.macro xio
@3 .= @p1 + @p2 + @p3 + @p4 + @p5
.if %0 = 6
@3 .= %6
.endif
ch_x %2,[@3 & @p2]/@p2 ! [@3 & @special]
@moke_x %1,iccom, @3
@moke_x %3,icax1,[@3 & @p3] / @p3
@moke_x %4,icax2,[@3 & @p3] / @p4
@dmoad %5,[@3 & @p5] / @p5
jsr ciov
.endm
.macro putc
@3 .= @p1 + @p2
.if %0 = 3
@3 .= %3
.endif
ch_x %1, @3
@moad %2,[@3 & @p2] / @p2,@y
jsr putc
.endm
.macro getc
@3 .= @p1
.if %0 = 2
@3 .= %2
.endif
ch_x %1, @3
jsr getc
.endm
.endif