Files
Shawn Quick dfcaae62dd Add qlink, the disk tools, and a bootable ProDOS 8 image.
Move the assembler to src/qasm. qlink links OMF 1.0 and 2.0 from a script. makeBin flattens a load file, qomf dumps OMF, and qpro builds ProDOS volumes. APW and MPW assemble through the ORCA front end. Relocatable modules emit OMF objects. Listings stay off unless -l is set.

make boot assembles the GS/OS 6.0.1 ProDOS 8 kernel and BASIC.SYSTEM into an 800K volume. BASIC.SYSTEM accepts ls and pfx, and its splash reports PRODOS BASIC 2.0, copyright 1983-2026. IIGS.601.SRC is the source and the BASIC.SYSTEM oracle that image is built from.
2026-10-16 14:41:55 -07:00

1 line
6.0 KiB
Plaintext

****************************************************************
* Dave's macro file.
*
* contains macros for long conditional branching, store a,x macros
* ,etc.
*
* Version 1.1 10/17/88
*
****************************************************************
;---------------------------------------------------------
MACRO
&lab HEADER
&lab PROC EXPORT
IF DebugFlag<>0 THEN
jml @1
dc.b '&lab',0
@1
ENDIF
MEND
;---------------------------------------------------------
MACRO
ble &A
blt &A
beq &A
MEND
;---------------------------------------------------------
MACRO
bgt &A
beq @1
bge &A
@1
MEND
;---------------------------------------------------------
MACRO
bcsl &A
bcc @1
brl &A
@1
MEND
;---------------------------------------------------------
MACRO
bccl &A
bcs @1
brl &A
@1
MEND
;---------------------------------------------------------
MACRO
beql &A
bne @1
brl &A
@1
MEND
;---------------------------------------------------------
MACRO
bnel &A
beq @1
brl &A
@1
MEND
;---------------------------------------------------------
MACRO
bltl &A
bge @1
brl &A
@1
MEND
;---------------------------------------------------------
MACRO
bgel &A
blt @1
brl &A
@1
MEND
;---------------------------------------------------------
MACRO
blel &A
bgt @1
brl &A
@1
MEND
;---------------------------------------------------------
MACRO
bgtl &A
ble @1
brl &A
@1
MEND
;---------------------------------------------------------
MACRO
bmil &A
bpl @1
brl &A
@1
MEND
;---------------------------------------------------------
MACRO
bpll &A
bmi @1
brl &A
@1
MEND
;---------------------------------------------------------
MACRO
PushLongSpace
pha
pha
MEND
;---------------------------------------------------------
MACRO
PushWordSpace
pha
MEND
;---------------------------------------------------------
MACRO
PushAX
phx
pha
MEND
;---------------------------------------------------------
MACRO
PullAX
pla
plx
MEND
;---------------------------------------------------------
MACRO
PushZPtr &A
pea $0000
tdc
clc
adc #&A
pha
MEND
;---------------------------------------------------------
MACRO
PushZWord &A
pei &A
MEND
;---------------------------------------------------------
MACRO
PushZLong &A
PushZWord &A+2
PushZWord &A
MEND
;---------------------------------------------------------
MACRO
ldax &addr,&regs
IF &addr[1:1]='#' THEN
lda #&addr[2:255]
ldx #&addr[2:255]>>16
ELSEIF &addr[1:1]='[' THEN
IF &regs='y' THEN
lda &addr,y
pha
iny
iny
lda &addr,y
tax
pla
ELSE
ldy #&regs+2
lda &addr,y
tax
ldy #&regs
lda &addr,y
ENDIF
ELSEIF &regs='s' THEN
lda &addr+2,s
tax
lda &addr,s
ELSEIF &regs='' THEN
lda &addr
ldx &addr+2
ELSE
lda &addr+2,&offset
pha
lda &addr,&offset
plx
ENDIF
MEND
;---------------------------------------------------------
MACRO
ldaxZPtr &A
ldx #0
tdc
clc
adc #&A
MEND
;---------------------------------------------------------
MACRO
stax &addr,&regs
IF &addr[1:1]='[' THEN
IF &regs='y' THEN
sta &addr,y
iny
iny
txa
sta &addr,y
ELSE
ldy #&regs
sta &addr,y
txa
ldy #&regs+2
sta &addr,y
ENDIF
ELSEIF &regs='s' THEN
sta &addr,s
txa
sta &addr+2,s
ELSEIF &regs='' THEN
sta &addr
stx &addr+2
ELSE
sta &addr,&offset
txa
sta &addr+2,&offset
ENDIF
MEND
;---------------------------------------------------------
MACRO
casejmp &A,&B
cmp #&A
bne @1
brl &B
@1
MEND
;---------------------------------------------------------
MACRO
cmpl &A,&B
IF &B='' THEN
cpx &A+2
bne @1
cmp &A
ELSE
lda &A+2
cmp &B+2
bne @1
lda &A
cmp &B
ENDIF
@1
MEND
;---------------------------------------------------------
MACRO
incl &A
IF &A='a' THEN
inc a
bne @1
inx
ELSE
inc &A
bne @1
inc &A+2
ENDIF
@1
MEND
;---------------------------------------------------------
MACRO
decl &A
IF &A='a' THEN
cmp #0
bne @1
dex
@1 dec a
ELSE
lda &A
bne @2
dec &A+2
@2 dec &A
ENDIF
MEND
;---------------------------------------------------------
MACRO
stzl &A
stz &A
stz &A+2
MEND
;---------------------------------------------------------
MACRO
subl &A,&B,&C
lda &A
sec
sbc &B
sta &C
lda &A+2
sbc &B+2
sta &C+2
MEND
;---------------------------------------------------------
MACRO
addl &A,&B,&C
IF &C='' ** &B='' THEN
clc
adc &A
sta &A
bcc @1
inc &A+2
@1
ELSE
lda &A
clc
adc &B
sta &C
lda &A+2
adc &B+2
sta &C+2
ENDIF
MEND
;---------------------------------------------------------
MACRO
subw &A,&B,&C
lda &A
sec
sbc &B
sta &C
MEND
;---------------------------------------------------------
MACRO
addw &A,&B,&C
lda &A
clc
adc &B
sta &C
MEND
;---------------------------------------------------------
MACRO
mov &A,&B
lda &A
sta &B
MEND
;---------------------------------------------------------
MACRO
swap &A,&B
lda &A
pha
lda &B
sta &A
pla
sta &B
MEND
;---------------------------------------------------------
MACRO
swapl &A,&B
swap &A,&B
swap &A+2,&B+2
MEND
;---------------------------------------------------------
MACRO
movl &A,&B
mov &A,&B
mov &A+2,&B+2
MEND
;---------------------------------------------------------
MACRO
move &A,&B
mov &A,&B
MEND
;---------------------------------------------------------
MACRO
moveword &A,&B
mov &A,&B
MEND
;---------------------------------------------------------
MACRO
movelong &A,&B
movl &A,&B
MEND
;---------------------------------------------------------
MACRO
sublong &A,&B,&C
subl &A,&B,&C
MEND
;---------------------------------------------------------
MACRO
addlong &A,&B,&C
addl &A,&B,&C
MEND
;---------------------------------------------------------
MACRO
PushZeroPtr &A
PushZPtr &A
MEND
;---------------------------------------------------------