mirror of
https://github.com/ksherlock/x65.git
synced 2024-12-27 13:29:18 +00:00
Merge branch 'master' of https://github.com/Sakrac/x65
This commit is contained in:
commit
c2492ab348
91
samples/apple2gs/gsos/Makefile
Normal file
91
samples/apple2gs/gsos/Makefile
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#
|
||||||
|
# fun2gs/Makefile
|
||||||
|
#
|
||||||
|
|
||||||
|
# This makefile was created by Jason Andersen
|
||||||
|
#
|
||||||
|
# I build on Windows-10 64-bit, this makefile is designed to run under
|
||||||
|
# a Windows-10 Command Prompt, and makes use of DOS shell commands
|
||||||
|
#
|
||||||
|
# In order to build this you need x65
|
||||||
|
#
|
||||||
|
# https://github.com/Sakrac/x65
|
||||||
|
#
|
||||||
|
# As far a free stuff, I setup a c:\bin directory, in my path
|
||||||
|
# the following packages and executables are in there
|
||||||
|
#
|
||||||
|
# Fine Tools from Brutal Deluxe
|
||||||
|
# http://www.brutaldeluxe.fr/products/crossdevtools/
|
||||||
|
# Cadius.exe
|
||||||
|
# Merlin32.exe
|
||||||
|
# OMFAnalyzer.exe
|
||||||
|
# LZ4.exe
|
||||||
|
#
|
||||||
|
# gnumake-4.2.1-x64.exe (with a symbolic link that aliases this to "make")
|
||||||
|
#
|
||||||
|
# https://apple2.gs/plus/
|
||||||
|
# gsplus32.exe (KEGS based GS Emulator fork by Dagen Brock)
|
||||||
|
# I configure this to boot the xrick.po image directly
|
||||||
|
# once that's done "make run" will build, update the disk image
|
||||||
|
# and boot into xrick2gs.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Make and Build Variables
|
||||||
|
|
||||||
|
TARGETNAME = fun2gs
|
||||||
|
|
||||||
|
VPATH = src:obj
|
||||||
|
ASMFILES = $(wildcard asm/*.s)
|
||||||
|
OBJFILES += $(patsubst asm/%.s,obj/%.x65,$(ASMFILES))
|
||||||
|
ASM = x65
|
||||||
|
ASMFLAGS = -lst
|
||||||
|
# List of directories to create
|
||||||
|
DIRS=obj
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo.
|
||||||
|
@echo $(TARGETNAME) Makefile
|
||||||
|
@echo -------------------------------------------------
|
||||||
|
@echo build commands:
|
||||||
|
@echo make gs - Apple IIgs
|
||||||
|
@echo make image - Build Bootable .PO File
|
||||||
|
@echo make run - Build / Run IIgs on emulator
|
||||||
|
@echo make clean - Clean intermediate/target files
|
||||||
|
@echo make depend - Build dependencies
|
||||||
|
@echo -------------------------------------------------
|
||||||
|
@echo.
|
||||||
|
|
||||||
|
$(TARGETNAME).sys16: $(OBJFILES)
|
||||||
|
$(ASM) link.s $(TARGETNAME).sys16 -iobj -a2o -sym x65.sym -lst
|
||||||
|
|
||||||
|
gs: $(TARGETNAME).sys16
|
||||||
|
|
||||||
|
disk image: gs
|
||||||
|
@echo Updating $(TARGETNAME).po
|
||||||
|
@echo Remove $(TARGETNAME).sys16
|
||||||
|
cadius deletefile $(TARGETNAME).po /$(TARGETNAME)/$(TARGETNAME).sys16
|
||||||
|
@echo Add $(TARGETNAME).sys16
|
||||||
|
cadius addfile $(TARGETNAME).po /$(TARGETNAME) ./$(TARGETNAME).sys16
|
||||||
|
|
||||||
|
run: image
|
||||||
|
gsplus32
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo Remove $(TARGETNAME).sys16
|
||||||
|
$(shell if exist $(TARGETNAME).sys16 echo Y | del $(TARGETNAME).sys16)
|
||||||
|
@echo Remove Intermediate Files
|
||||||
|
@del /q obj\*
|
||||||
|
|
||||||
|
depend:
|
||||||
|
@echo TODO - make dependencies
|
||||||
|
|
||||||
|
# Generic Rules
|
||||||
|
#objdir: obj
|
||||||
|
|
||||||
|
obj/%.x65 : asm/%.s
|
||||||
|
@echo Assembling $(<F)
|
||||||
|
$(ASM) $< -cpu=65816 -imacros -idata -obj $@ $(ASMFLAGS)
|
||||||
|
|
||||||
|
# Create all the directories
|
||||||
|
$(shell if not exist $(DIRS) mkdir $(DIRS))
|
||||||
|
|
1
samples/apple2gs/gsos/_FileInformation.txt
Normal file
1
samples/apple2gs/gsos/_FileInformation.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
FUN2GS.SYS16=Type(B3),AuxType(DB07),VersionCreate(24),MinVersion(00),Access(21),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000)
|
7
samples/apple2gs/gsos/asm/background.s
Normal file
7
samples/apple2gs/gsos/asm/background.s
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
xdef background.c1
|
||||||
|
section background, Data
|
||||||
|
|
||||||
|
background.c1:
|
||||||
|
incbin "background.c1"
|
||||||
|
|
29455
samples/apple2gs/gsos/asm/blit.s
Normal file
29455
samples/apple2gs/gsos/asm/blit.s
Normal file
File diff suppressed because it is too large
Load Diff
2323
samples/apple2gs/gsos/asm/dbgfnt.s
Normal file
2323
samples/apple2gs/gsos/asm/dbgfnt.s
Normal file
File diff suppressed because it is too large
Load Diff
173
samples/apple2gs/gsos/asm/lz4.s
Normal file
173
samples/apple2gs/gsos/asm/lz4.s
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
*
|
||||||
|
* ORCA/M Format!!
|
||||||
|
* LZ4 Decompress by Brutal Deluxe!!!
|
||||||
|
*
|
||||||
|
include common.i
|
||||||
|
include dp.s
|
||||||
|
|
||||||
|
mx %00
|
||||||
|
xdef unpacklz4
|
||||||
|
xdef LZ4_Unpack
|
||||||
|
|
||||||
|
unpacklz4:
|
||||||
|
{
|
||||||
|
if 1
|
||||||
|
phb
|
||||||
|
phk
|
||||||
|
plb
|
||||||
|
|
||||||
|
sep #$20
|
||||||
|
lda dp.source+2
|
||||||
|
xba
|
||||||
|
lda dp.dest+2
|
||||||
|
rep #$31
|
||||||
|
tax
|
||||||
|
|
||||||
|
lda dp.dest
|
||||||
|
sta LZ4_Dst+1
|
||||||
|
|
||||||
|
plb
|
||||||
|
endif
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
*
|
||||||
|
* int LZ4_Unpack(u8* pDest, u8* pPackedSource);
|
||||||
|
*
|
||||||
|
|
||||||
|
LZ4_Unpack start ASMCODE
|
||||||
|
|
||||||
|
pDest equ 5
|
||||||
|
pPackedSource equ 9
|
||||||
|
|
||||||
|
phb
|
||||||
|
phk
|
||||||
|
plb
|
||||||
|
|
||||||
|
sep #$20
|
||||||
|
lda pPackedSource+2,s ; Pull out the src/dst banks
|
||||||
|
xba
|
||||||
|
lda pDest+2,s ; Pull out the src/dst banks
|
||||||
|
|
||||||
|
rep #$31
|
||||||
|
tax ; Temp save in X
|
||||||
|
|
||||||
|
lda pDest,s
|
||||||
|
sta LZ4_Dst+1
|
||||||
|
|
||||||
|
lda pPackedSource+1,s ; address of packed source + 4, is the unpacked len
|
||||||
|
sta upl+2
|
||||||
|
|
||||||
|
lda pPackedSource,s
|
||||||
|
adc #12
|
||||||
|
sta upl+1
|
||||||
|
|
||||||
|
upl lda >0 ; packed length
|
||||||
|
adc #16 ; 16 bytes for packed buffer header
|
||||||
|
adc pPackedSource,s ; start of packed buffer
|
||||||
|
tay ; y has the pack data stop address
|
||||||
|
|
||||||
|
anop ; 1st packed Byte offset
|
||||||
|
lda pPackedSource,s ; skip 16 byte header on the source
|
||||||
|
adc #16
|
||||||
|
pha
|
||||||
|
txa
|
||||||
|
plx
|
||||||
|
|
||||||
|
jsr ASM_LZ4_Unpack
|
||||||
|
tay
|
||||||
|
|
||||||
|
anop ; Copy the Return address
|
||||||
|
lda 1,s
|
||||||
|
sta pPackedSource,s
|
||||||
|
lda 3,s
|
||||||
|
sta pPackedSource+2,s
|
||||||
|
|
||||||
|
tsc
|
||||||
|
sec
|
||||||
|
sbc #-8
|
||||||
|
tcs
|
||||||
|
tya ; return length
|
||||||
|
|
||||||
|
plb
|
||||||
|
rtl
|
||||||
|
|
||||||
|
*-------------------------------------------------------------------------------
|
||||||
|
ASM_LZ4_Unpack STA LZ4_Literal_3+1 ; Uncompress a LZ4 Packed Data buffer (64 KB max)
|
||||||
|
SEP #$20 ; A = Bank Src,Bank Dst
|
||||||
|
STA LZ4_Match_5+1 ; X = Header Size = 1st Packed Byte offset
|
||||||
|
STA LZ4_Match_5+2 ; Y = Pack Data Size
|
||||||
|
XBA ; => Return in A the length of unpacked Data
|
||||||
|
STA LZ4_ReadToken+3
|
||||||
|
STA LZ4_Match_1+3
|
||||||
|
STA LZ4_GetLength_1+3
|
||||||
|
REP #$30
|
||||||
|
STY LZ4_Limit+1
|
||||||
|
*--
|
||||||
|
LZ4_Dst LDY #$0000 ; Init Target unpacked Data offset
|
||||||
|
LZ4_ReadToken LDA >$AA0000,X ; Read Token Byte
|
||||||
|
INX
|
||||||
|
STA LZ4_Match_2+1
|
||||||
|
*----------------
|
||||||
|
LZ4_Literal AND #$00F0 ; >>> Process Literal Bytes <<<
|
||||||
|
BEQ LZ4_Limit ; No Literal
|
||||||
|
CMP #$00F0
|
||||||
|
BNE LZ4_Literal_1
|
||||||
|
JSR LZ4_GetLengthLit ; Compute Literal Length with next bytes
|
||||||
|
BRA LZ4_Literal_2
|
||||||
|
LZ4_Literal_1 LSR A ; Literal Length use the 4 bit
|
||||||
|
LSR A
|
||||||
|
LSR A
|
||||||
|
LSR A
|
||||||
|
*--
|
||||||
|
LZ4_Literal_2 DEC A ; Copy A+1 Bytes
|
||||||
|
LZ4_Literal_3 MVN $AA,$BB ; Copy Literal Bytes from packed data buffer
|
||||||
|
PHK ; X and Y are auto incremented
|
||||||
|
PLB
|
||||||
|
*----------------
|
||||||
|
LZ4_Limit CPX #$AAAA ; End Of Packed Data buffer ?
|
||||||
|
BEQ LZ4_End
|
||||||
|
*----------------
|
||||||
|
LZ4_Match TYA ; >>> Process Match Bytes <<<
|
||||||
|
SEC
|
||||||
|
LZ4_Match_1 SBC >$AA0000,X ; Match Offset
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
STA LZ4_Match_4+1
|
||||||
|
*--
|
||||||
|
LZ4_Match_2 LDA #$0000 ; Current Token Value
|
||||||
|
AND #$000F
|
||||||
|
CMP #$000F
|
||||||
|
BNE LZ4_Match_3
|
||||||
|
JSR LZ4_GetLengthMat ; Compute Match Length with next bytes
|
||||||
|
LZ4_Match_3 CLC
|
||||||
|
ADC #$0003 ; Minimum Match Length is 4 (-1 for the MVN)
|
||||||
|
*--
|
||||||
|
PHX
|
||||||
|
LZ4_Match_4 LDX #$AAAA ; Match Byte Offset
|
||||||
|
LZ4_Match_5 MVN $BB,$BB ; Copy Match Bytes from unpacked data buffer
|
||||||
|
PHK ; X and Y are auto incremented
|
||||||
|
PLB
|
||||||
|
PLX
|
||||||
|
*----------------
|
||||||
|
BRA LZ4_ReadToken
|
||||||
|
*----------------
|
||||||
|
LZ4_GetLengthLit LDA #$000F ; Compute Variable Length (Literal or Match)
|
||||||
|
LZ4_GetLengthMat STA LZ4_GetLength_2+1
|
||||||
|
LZ4_GetLength_1 LDA >$AA0000,X ; Read Length Byte
|
||||||
|
INX
|
||||||
|
AND #$00FF
|
||||||
|
CMP #$00FF
|
||||||
|
BNE LZ4_GetLength_3
|
||||||
|
CLC
|
||||||
|
LZ4_GetLength_2 ADC #$000F
|
||||||
|
STA LZ4_GetLength_2+1
|
||||||
|
BRA LZ4_GetLength_1
|
||||||
|
LZ4_GetLength_3 ADC LZ4_GetLength_2+1
|
||||||
|
RTS
|
||||||
|
*----------------
|
||||||
|
LZ4_End TYA ; A = Length of Unpack Data
|
||||||
|
RTS
|
||||||
|
*-------------------------------------------------------------------------------
|
||||||
|
end
|
||||||
|
|
380
samples/apple2gs/gsos/asm/start.s
Normal file
380
samples/apple2gs/gsos/asm/start.s
Normal file
@ -0,0 +1,380 @@
|
|||||||
|
*----- Merlin 16+ Directives
|
||||||
|
|
||||||
|
rel
|
||||||
|
dsk start.l
|
||||||
|
|
||||||
|
include common.i
|
||||||
|
; SECTION code
|
||||||
|
|
||||||
|
|
||||||
|
dbg XREF dbgprint_char
|
||||||
|
XREF background.c1
|
||||||
|
|
||||||
|
STRING FontOrder = " !""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
|
||||||
|
|
||||||
|
start ent
|
||||||
|
mx %00 ; assemble in 16 bit
|
||||||
|
|
||||||
|
rel ; Build a relocated S16 file
|
||||||
|
include Locator.Macs.s ; Macro Definition Files
|
||||||
|
include Mem.Macs.s
|
||||||
|
include Misc.Macs.s
|
||||||
|
include Util.Macs.s
|
||||||
|
include Sound.Macs.s
|
||||||
|
|
||||||
|
*----- Begin Of Program ----------
|
||||||
|
|
||||||
|
PHK ; Data Bank Register = Program Bank Register
|
||||||
|
PLB
|
||||||
|
|
||||||
|
; A has UserID
|
||||||
|
sta myID
|
||||||
|
|
||||||
|
bra .next
|
||||||
|
|
||||||
|
; work around OMF export bug
|
||||||
|
dc.t start
|
||||||
|
|
||||||
|
.next
|
||||||
|
; D = direct page address
|
||||||
|
; S = Stack Pointer
|
||||||
|
tsx
|
||||||
|
stx |mySP
|
||||||
|
tdc
|
||||||
|
sta |myDP
|
||||||
|
sec
|
||||||
|
tsc
|
||||||
|
sbc |myDP
|
||||||
|
inc ; Count byte # 0
|
||||||
|
sta |myBank0Size
|
||||||
|
|
||||||
|
JSR ToolInit ; Init Tools + Compact Memory + Ask Shadowing
|
||||||
|
JSR BackupEnv ; Backup environment (colors...)
|
||||||
|
|
||||||
|
*----- Your Code Starts Here ----------
|
||||||
|
phb
|
||||||
|
lda #$7FFF ; Length - 1
|
||||||
|
ldx #<background.c1 ; source address
|
||||||
|
ldy #$2000 ; dest address
|
||||||
|
mvn ^$e12000,^background.c1 ; dst/src addresses
|
||||||
|
plb
|
||||||
|
{
|
||||||
|
ldy #$2000+(32*160)
|
||||||
|
jsr PrintE1
|
||||||
|
text "Stack ADDR:"
|
||||||
|
dc.b 0
|
||||||
|
|
||||||
|
ldy #$2000+(40*160)
|
||||||
|
jsr PrintE1
|
||||||
|
text " DP ADDR:"
|
||||||
|
dc.b 0
|
||||||
|
|
||||||
|
ldy #$2000+(48*160)
|
||||||
|
jsr PrintE1
|
||||||
|
text "Bank0 Size:"
|
||||||
|
dc.b 0
|
||||||
|
|
||||||
|
ldy #$2000+(80*160)+(4*0)
|
||||||
|
jsr PrintE1
|
||||||
|
text "[Press any key to Quit]"
|
||||||
|
dc.b 0
|
||||||
|
|
||||||
|
ldy #$2000+(16*160)
|
||||||
|
jsr PrintE1
|
||||||
|
text "x65 OMF Test App"
|
||||||
|
dc.b 0
|
||||||
|
}
|
||||||
|
{
|
||||||
|
pool zpWork $e0-$100
|
||||||
|
zpWork zpCharNum.w
|
||||||
|
|
||||||
|
phb
|
||||||
|
* get us into bank e1
|
||||||
|
pea $e1e1
|
||||||
|
plb
|
||||||
|
plb
|
||||||
|
|
||||||
|
lda #32
|
||||||
|
ldy #$2000
|
||||||
|
clc
|
||||||
|
.loop
|
||||||
|
sta <zpCharNum
|
||||||
|
jsr dbgprint_char
|
||||||
|
tya
|
||||||
|
adc #4
|
||||||
|
tay
|
||||||
|
lda <zpCharNum
|
||||||
|
inc
|
||||||
|
cmp #64
|
||||||
|
bcc .loop
|
||||||
|
|
||||||
|
plb
|
||||||
|
}
|
||||||
|
{
|
||||||
|
pea $e1e1
|
||||||
|
plb
|
||||||
|
plb
|
||||||
|
|
||||||
|
ldy #$2000+(32*160)+(4*12)
|
||||||
|
lda >mySP
|
||||||
|
jsr PrintHEX
|
||||||
|
|
||||||
|
ldy #$2000+(40*160)+(4*12)
|
||||||
|
lda >myDP
|
||||||
|
jsr PrintHEX
|
||||||
|
|
||||||
|
ldy #$2000+(48*160)+(4*12)
|
||||||
|
lda >myBank0Size
|
||||||
|
jsr PrintHEX
|
||||||
|
|
||||||
|
phk
|
||||||
|
plb
|
||||||
|
}
|
||||||
|
|
||||||
|
JSR WaitForKey ; Wait until a Key is pressed
|
||||||
|
|
||||||
|
*----- End Of Program ---------
|
||||||
|
|
||||||
|
End JSR RestoreEnv ; Restore environment (colors...)
|
||||||
|
|
||||||
|
JSR ToolTerm ; End up Tools
|
||||||
|
JMP Exit ; Quit to the Launcher
|
||||||
|
|
||||||
|
************************************************************
|
||||||
|
******* INIT TOOL SET/ FREE TOOL CODE *******
|
||||||
|
************************************************************
|
||||||
|
|
||||||
|
ToolInit
|
||||||
|
; _TLStartUp ; Start Tools
|
||||||
|
; PHA
|
||||||
|
; _MMStartUp ; Start Memory Manager Tool Set
|
||||||
|
; PLA
|
||||||
|
; STA myID ; Get current ID
|
||||||
|
*--
|
||||||
|
_MTStartUp ; Start Miscellaneous Tool Set
|
||||||
|
*--
|
||||||
|
* clc ; grab the memory next to my DP
|
||||||
|
* lda |myDP
|
||||||
|
* adc #$100
|
||||||
|
* pha
|
||||||
|
* _SoundStartUp ; Start Sound Tool Set
|
||||||
|
*--
|
||||||
|
PushLong #0 ; Compact Memory
|
||||||
|
PushLong #$8fffff
|
||||||
|
PushWord myID
|
||||||
|
PushWord #%11000000_00000000
|
||||||
|
PushLong #0
|
||||||
|
_NewHandle
|
||||||
|
_DisposeHandle
|
||||||
|
_CompactMem
|
||||||
|
*--
|
||||||
|
// Allocate Bank 01 memory + 4K before and after (25 lines pre flow)
|
||||||
|
// $012000-$019BFF pixel data
|
||||||
|
// $019D00-$019DC7 SCB data
|
||||||
|
// $019E00-$019FFF Clut data
|
||||||
|
// $900 bytes afer, (14 lines buffer on the bottom, which will wreck SCB+CLUT
|
||||||
|
|
||||||
|
PushLong #0 ; Ask Shadowing Screen ($8000 bytes from $01/2000)
|
||||||
|
PushLong #$9600
|
||||||
|
PushWord myID
|
||||||
|
PushWord #%11000000_00000011
|
||||||
|
PushLong #$011000
|
||||||
|
_NewHandle
|
||||||
|
PLA
|
||||||
|
PLA
|
||||||
|
BCC :NoError
|
||||||
|
*--
|
||||||
|
:NoError
|
||||||
|
RTS
|
||||||
|
|
||||||
|
*-------
|
||||||
|
|
||||||
|
ToolTerm:
|
||||||
|
* _SoundShutDown ; Stop Tools
|
||||||
|
_MTShutDown
|
||||||
|
PushWord myID
|
||||||
|
_DisposeAll
|
||||||
|
; PushWord myID
|
||||||
|
; _MMShutDown
|
||||||
|
; _TLShutDown
|
||||||
|
RTS
|
||||||
|
|
||||||
|
myID ds 2 ; ID of this Program in memory
|
||||||
|
mySP ds 2
|
||||||
|
myDP ds 2
|
||||||
|
myBank0Size ds 2
|
||||||
|
*---------------------------------------
|
||||||
|
|
||||||
|
BackupEnv SEP #$30 ; Backup Environment values (color, border...)
|
||||||
|
LDAL $00C022
|
||||||
|
STA BE_C022
|
||||||
|
LDAL $00C029
|
||||||
|
STA BE_C029
|
||||||
|
LDAL $00C034
|
||||||
|
STA BE_C034
|
||||||
|
LDAL $00C035
|
||||||
|
STA BE_C035
|
||||||
|
REP #$30
|
||||||
|
RTS
|
||||||
|
|
||||||
|
*-----
|
||||||
|
|
||||||
|
RestoreEnv SEP #$30 ; Restore Environment values (color, border...)
|
||||||
|
LDA BE_C035
|
||||||
|
STAL $00C035
|
||||||
|
LDA BE_C034
|
||||||
|
STAL $00C034
|
||||||
|
LDA BE_C029
|
||||||
|
STAL $00C029
|
||||||
|
LDA BE_C022
|
||||||
|
STAL $00C022
|
||||||
|
REP #$30
|
||||||
|
RTS
|
||||||
|
|
||||||
|
BE_C022 byte 00 ; Background Color
|
||||||
|
BE_C029 byte 00 ; Linearization of the Graphic Page
|
||||||
|
BE_C034 byte 00 ; Border Color
|
||||||
|
BE_C035 byte 00 ; Shadowing
|
||||||
|
|
||||||
|
************************************************************
|
||||||
|
******* GS/OS CODE *******
|
||||||
|
************************************************************
|
||||||
|
|
||||||
|
GSOS = $E100A8
|
||||||
|
|
||||||
|
*-------
|
||||||
|
|
||||||
|
Exit JSL GSOS ; Quit Program
|
||||||
|
dc.w $2029
|
||||||
|
dc.l gsosQUIT
|
||||||
|
|
||||||
|
*-------
|
||||||
|
|
||||||
|
gsosQUIT ds.w 2 ; pCount
|
||||||
|
ds.b 4 ; pathname
|
||||||
|
ds.b 2 ; flags
|
||||||
|
|
||||||
|
|
||||||
|
************************************************************
|
||||||
|
******* EVENT HANDLER CODE *******
|
||||||
|
************************************************************
|
||||||
|
|
||||||
|
WaitForKey SEP #$30 ; Wait for a Key Press
|
||||||
|
WFK_1 LDAL $00c000
|
||||||
|
BPL WFK_1
|
||||||
|
STAL $00c010
|
||||||
|
REP #$30
|
||||||
|
RTS
|
||||||
|
|
||||||
|
************************************************************
|
||||||
|
*
|
||||||
|
* Print out a TEXT String, at memory location Y
|
||||||
|
* in Bank E1
|
||||||
|
*
|
||||||
|
PrintE1:
|
||||||
|
mx %00
|
||||||
|
{
|
||||||
|
pool zpWork $e0-$100
|
||||||
|
zpWork pString.l
|
||||||
|
|
||||||
|
* Setup pString as pointer to the string
|
||||||
|
|
||||||
|
plx
|
||||||
|
inx
|
||||||
|
stx <pString
|
||||||
|
phk
|
||||||
|
phk
|
||||||
|
pla
|
||||||
|
sta <pString+2
|
||||||
|
|
||||||
|
* Font render bank
|
||||||
|
|
||||||
|
pea $e1e1
|
||||||
|
plb
|
||||||
|
plb
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
|
.loop
|
||||||
|
lda [pString]
|
||||||
|
and #$00FF
|
||||||
|
beq .done
|
||||||
|
|
||||||
|
sbc #31
|
||||||
|
jsr dbgprint_char
|
||||||
|
|
||||||
|
tya
|
||||||
|
adc #4
|
||||||
|
tay
|
||||||
|
inc <pString
|
||||||
|
bra .loop
|
||||||
|
.done
|
||||||
|
pei <pString
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
************************************************************
|
||||||
|
*
|
||||||
|
* Print out a 16 bit hex number, at memory location Y
|
||||||
|
* in the current bank
|
||||||
|
*
|
||||||
|
PrintHEX:
|
||||||
|
mx %00
|
||||||
|
{
|
||||||
|
pha
|
||||||
|
xba
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
and #$000F
|
||||||
|
|
||||||
|
tax
|
||||||
|
lda >chartable,x
|
||||||
|
and #$00FF
|
||||||
|
jsr dbgprint_char
|
||||||
|
|
||||||
|
tya
|
||||||
|
adc #4
|
||||||
|
tay
|
||||||
|
lda 2,s
|
||||||
|
and #$000F
|
||||||
|
tax
|
||||||
|
lda >chartable,x
|
||||||
|
and #$00FF
|
||||||
|
jsr dbgprint_char
|
||||||
|
|
||||||
|
tya
|
||||||
|
adc #4
|
||||||
|
tay
|
||||||
|
|
||||||
|
lda 1,s
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
and #$000F
|
||||||
|
tax
|
||||||
|
lda >chartable,x
|
||||||
|
and #$00FF
|
||||||
|
jsr dbgprint_char
|
||||||
|
|
||||||
|
tya
|
||||||
|
adc #4
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
and #$000F
|
||||||
|
tax
|
||||||
|
lda >chartable,x
|
||||||
|
and #$00FF
|
||||||
|
jsr dbgprint_char
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
chartable dc.b 16,17,18,19,20,21,22,23,24,25,33,34,35,36,37,38
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
************************************************************
|
||||||
|
|
153
samples/apple2gs/gsos/bin/ftile/Makefile
Normal file
153
samples/apple2gs/gsos/bin/ftile/Makefile
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
#--------------------------------------------------------
|
||||||
|
# $File: Makefile,v $
|
||||||
|
#
|
||||||
|
# $Date: 2019/10/20 $
|
||||||
|
# $Author: jandersen $
|
||||||
|
# $Revision: #1 $
|
||||||
|
#--------------------------------------------------------
|
||||||
|
#
|
||||||
|
# ftile GCC-Gnu Makefile
|
||||||
|
#
|
||||||
|
|
||||||
|
# compile under *nix, or Windows Subsystem for Linux
|
||||||
|
|
||||||
|
SHELL = /bin/sh
|
||||||
|
MKDIR = mkdir
|
||||||
|
|
||||||
|
TARGET = ftile
|
||||||
|
|
||||||
|
PROJROOT = .
|
||||||
|
|
||||||
|
#SYSTEM = /usr
|
||||||
|
#SYSLIBDIR = $(SYSTEM)/lib
|
||||||
|
#SYSINCDIR = $(SYSTEM)/include
|
||||||
|
|
||||||
|
INCCMD = -I$(SYSINCDIR)
|
||||||
|
INCCMD += -I$(PROJROOT)/source
|
||||||
|
INCCMD += -I$(PROJROOT)/include
|
||||||
|
|
||||||
|
OBJDIR = $(PROJROOT)/obj
|
||||||
|
DEPDIR = $(PROJROOT)/dep
|
||||||
|
LSTDIR = $(PROJROOT)/lst
|
||||||
|
|
||||||
|
#
|
||||||
|
# Special GnuMake Search Path Directive
|
||||||
|
#
|
||||||
|
VPATH = $(PROJROOT)/source
|
||||||
|
|
||||||
|
#
|
||||||
|
# Dedicated Search Paths for Specific Types
|
||||||
|
#
|
||||||
|
# Can be used to speed up compile by using this feature
|
||||||
|
# for each filetype (reducing the amount of searching)
|
||||||
|
#
|
||||||
|
vpath %.o $(OBJDIR)
|
||||||
|
vpath %.d $(DEPDIR)
|
||||||
|
|
||||||
|
LIBCMD +=-lm
|
||||||
|
|
||||||
|
OBJS := ftile.o
|
||||||
|
OBJS += rawdata.o
|
||||||
|
|
||||||
|
# change list of .o's into a list of .d's
|
||||||
|
|
||||||
|
DEPS := $(OBJS:%.o=%.d)
|
||||||
|
|
||||||
|
AS = gcc
|
||||||
|
CC = gcc
|
||||||
|
LD = gcc
|
||||||
|
RM = /bin/rm -rfv
|
||||||
|
|
||||||
|
CFLAGS = -O2 -Wall -Werror -Wa,-al -fno-common
|
||||||
|
CXXFLAGS = -O2 -Wall -Werror -Wa,-al -fno-common
|
||||||
|
ASFLAGS = -c -xassembler-with-cpp -Wa,-al
|
||||||
|
LDFLAGS = -Wl,-Map,$(TARGET).map $(LIBCMD)
|
||||||
|
|
||||||
|
# Clear Default Suffixes
|
||||||
|
.SUFFIXES:
|
||||||
|
# Set my Own Suffixes
|
||||||
|
.SUFFIXES: .c .s .cc .d .o
|
||||||
|
|
||||||
|
all: $(TARGET)
|
||||||
|
|
||||||
|
$(TARGET): $(DEPS) $(OBJS) $(LIBS)
|
||||||
|
$(LD) -o $@ $(addprefix $(OBJDIR)/,$(OBJS)) $(LIBS) $(LDFLAGS)
|
||||||
|
|
||||||
|
# Object Rules
|
||||||
|
|
||||||
|
.s.o:
|
||||||
|
$(AS) $(ASFLAGS) $(TMPFLAGS) $(INCCMD) -o $(OBJDIR)/$@ $< > $(LSTDIR)/$*.lst
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
$(CC) $(CFLAGS) $(TMPFLAGS) $(INCCMD) -c $< -o $(OBJDIR)/$*.o > $(LSTDIR)/$*.lst
|
||||||
|
|
||||||
|
.cc.o:
|
||||||
|
$(CC) $(CXXFLAGS) $(TMPFLAGS) $(INCCMD) -c $< -o $(OBJDIR)/$*.o > $(LSTDIR)/$*.lst
|
||||||
|
|
||||||
|
# Dependencie Rules
|
||||||
|
#
|
||||||
|
# for now just touch, to create the file if its not defined
|
||||||
|
#
|
||||||
|
.s.d:
|
||||||
|
touch $(DEPDIR)/$*.d
|
||||||
|
|
||||||
|
.c.d:
|
||||||
|
set -e; $(CC) -M $(CFLAGS) $(INCCMD) $< \
|
||||||
|
| sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $(DEPDIR)/$@; \
|
||||||
|
[ -s $(DEPDIR)/$@ ] || rm -f $(DEPDIR)/$@
|
||||||
|
|
||||||
|
.cc.d:
|
||||||
|
set -e; $(CC) -M $(CXXFLAGS) $(INCCMD) $< \
|
||||||
|
| sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $(DEPDIR)/$@; \
|
||||||
|
[ -s $(DEPDIR)/$@ ] || rm -f $(DEPDIR)/$@
|
||||||
|
|
||||||
|
.PHONY: install
|
||||||
|
install: $(TARGET)
|
||||||
|
cp $(TARGET).exe $(PROJROOT)/../bin
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
$(RM) $(OBJDIR) *.o $(DEPDIR) *.map $(LSTDIR) $(TARGET) $(TARGET).exe
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
#
|
||||||
|
# HELPER TARGET RULES
|
||||||
|
#
|
||||||
|
########################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# Target that forces all of the objects to be rebuilt if the makefile changes
|
||||||
|
#
|
||||||
|
|
||||||
|
$(OBJS) : Makefile
|
||||||
|
$(DEPS) : Makefile
|
||||||
|
#
|
||||||
|
# Targets that create the output object directory if it doesn't already exist
|
||||||
|
#
|
||||||
|
|
||||||
|
Makefile : $(OBJDIR) $(DEPDIR) $(LSTDIR)
|
||||||
|
|
||||||
|
$(OBJDIR) :
|
||||||
|
$(MKDIR) $(OBJDIR)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Targets that create the output dependency directory if it doesn't already exist
|
||||||
|
#
|
||||||
|
|
||||||
|
$(DEPDIR) :
|
||||||
|
$(MKDIR) $(DEPDIR)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Targets that create the output list directory if it doesn't already exist
|
||||||
|
#
|
||||||
|
|
||||||
|
$(LSTDIR) :
|
||||||
|
$(MKDIR) $(LSTDIR)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Generated Dependencie Files
|
||||||
|
#
|
||||||
|
-include $(wildcard $(DEPDIR)/*.d)
|
||||||
|
|
||||||
|
|
BIN
samples/apple2gs/gsos/bin/ftile/TESTFONT.gs
Normal file
BIN
samples/apple2gs/gsos/bin/ftile/TESTFONT.gs
Normal file
Binary file not shown.
2256
samples/apple2gs/gsos/bin/ftile/TESTFONT.txt
Normal file
2256
samples/apple2gs/gsos/bin/ftile/TESTFONT.txt
Normal file
File diff suppressed because it is too large
Load Diff
BIN
samples/apple2gs/gsos/bin/ftile/null_terminator.gs
Normal file
BIN
samples/apple2gs/gsos/bin/ftile/null_terminator.gs
Normal file
Binary file not shown.
2278
samples/apple2gs/gsos/bin/ftile/null_terminator.txt
Normal file
2278
samples/apple2gs/gsos/bin/ftile/null_terminator.txt
Normal file
File diff suppressed because it is too large
Load Diff
45
samples/apple2gs/gsos/bin/ftile/source/bctypes.h
Normal file
45
samples/apple2gs/gsos/bin/ftile/source/bctypes.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
bctypes.h
|
||||||
|
|
||||||
|
Because Standard Types
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _bctypes_h
|
||||||
|
#define _bctypes_h
|
||||||
|
|
||||||
|
typedef signed char i8;
|
||||||
|
typedef unsigned char u8;
|
||||||
|
typedef signed short i16;
|
||||||
|
typedef unsigned short u16;
|
||||||
|
typedef signed long i32;
|
||||||
|
typedef unsigned long u32;
|
||||||
|
|
||||||
|
#if !_MSVC
|
||||||
|
typedef signed long long i64;
|
||||||
|
typedef unsigned long long u64;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef i32 bool;
|
||||||
|
|
||||||
|
typedef float f32;
|
||||||
|
typedef float r32;
|
||||||
|
typedef double f64;
|
||||||
|
typedef double r64;
|
||||||
|
|
||||||
|
|
||||||
|
#define false (0)
|
||||||
|
#define true (!false)
|
||||||
|
|
||||||
|
#define null (0)
|
||||||
|
|
||||||
|
// Odd Types
|
||||||
|
typedef union {
|
||||||
|
u64 ul64[2];
|
||||||
|
u32 ui32[4];
|
||||||
|
} QWdata;
|
||||||
|
|
||||||
|
|
||||||
|
#endif // _bctypes_h
|
||||||
|
|
||||||
|
// EOF - bctypes.h
|
||||||
|
|
187
samples/apple2gs/gsos/bin/ftile/source/ftile.c
Normal file
187
samples/apple2gs/gsos/bin/ftile/source/ftile.c
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
/*
|
||||||
|
#--------------------------------------------------------
|
||||||
|
# $File: ftile.c,v $
|
||||||
|
#--------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "bctypes.h"
|
||||||
|
#include "ftile.h"
|
||||||
|
#include "rawdata.h"
|
||||||
|
|
||||||
|
u16 GetBest16(unsigned char* pFrame, int width, int height)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RAWDATA* gResult = NULL;
|
||||||
|
|
||||||
|
void AddString(RAWDATA* pRaw, char* pString)
|
||||||
|
{
|
||||||
|
size_t len = strlen(pString);
|
||||||
|
|
||||||
|
size_t newlen = len+pRaw->size;
|
||||||
|
|
||||||
|
pRaw->data = (unsigned char*) realloc(pRaw->data, newlen);
|
||||||
|
|
||||||
|
memcpy(pRaw->data + pRaw->size, pString, len);
|
||||||
|
|
||||||
|
pRaw->size = newlen;
|
||||||
|
}
|
||||||
|
|
||||||
|
int AddLine(char*pLabel,char*pInst,char*pExp,int val,int clocks)
|
||||||
|
{
|
||||||
|
if (gResult)
|
||||||
|
{
|
||||||
|
char temp[256];
|
||||||
|
char pArg[256];
|
||||||
|
|
||||||
|
memset(pArg,0,256);
|
||||||
|
sprintf(pArg,pExp,val);
|
||||||
|
|
||||||
|
sprintf(temp, "%8s %3s %s\n", pLabel,pInst,pArg);
|
||||||
|
|
||||||
|
AddString(gResult, temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return clocks;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CompileTile(RAWDATA *result, u8* pTile)
|
||||||
|
{
|
||||||
|
static int offsets[16] =
|
||||||
|
{
|
||||||
|
(160 * 0) + 0, (160 * 0) + 2,
|
||||||
|
(160 * 1) + 0, (160 * 1) + 2,
|
||||||
|
(160 * 2) + 0, (160 * 2) + 2,
|
||||||
|
(160 * 3) + 0, (160 * 3) + 2,
|
||||||
|
(160 * 4) + 0, (160 * 4) + 2,
|
||||||
|
(160 * 5) + 0, (160 * 5) + 2,
|
||||||
|
(160 * 6) + 0, (160 * 6) + 2,
|
||||||
|
(160 * 7) + 0, (160 * 7) + 2
|
||||||
|
};
|
||||||
|
int clocks = 0;
|
||||||
|
u16 *pData = (u16*) pTile;
|
||||||
|
|
||||||
|
bool slots[16];
|
||||||
|
|
||||||
|
memset(slots, 0, sizeof(bool) * 16);
|
||||||
|
|
||||||
|
bool done = false;
|
||||||
|
|
||||||
|
while (!done)
|
||||||
|
{
|
||||||
|
u16 pixel = 0;
|
||||||
|
done = true;
|
||||||
|
|
||||||
|
// Load a cached Pixel
|
||||||
|
for (int idx = 0; idx < 16; ++idx)
|
||||||
|
{
|
||||||
|
if (slots[idx])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
done = false;
|
||||||
|
pixel = pData[idx];
|
||||||
|
clocks += AddLine("","LDA","#$%04X",pixel,3);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int outIdx = 0; outIdx < 16; ++outIdx)
|
||||||
|
{
|
||||||
|
if (slots[outIdx])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (pixel == pData[outIdx])
|
||||||
|
{
|
||||||
|
clocks += AddLine("","STA","$%04X,Y",offsets[outIdx],6);
|
||||||
|
slots[outIdx] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
clocks += AddLine("","RTL"," ;%d cycles",clocks+6,6);
|
||||||
|
}
|
||||||
|
|
||||||
|
RAWDATA* CompileTiles(RAWDATA* pTilesData, int bank)
|
||||||
|
{
|
||||||
|
RAWDATA* result = (RAWDATA*)malloc(sizeof(RAWDATA));
|
||||||
|
memset(result, 0, sizeof(RAWDATA));
|
||||||
|
|
||||||
|
gResult = result;
|
||||||
|
|
||||||
|
int numTiles = pTilesData->size / 32; // (32 bytes per tile)
|
||||||
|
|
||||||
|
char temp_label[256];
|
||||||
|
|
||||||
|
for (int idx = 0; idx < numTiles; ++idx)
|
||||||
|
{
|
||||||
|
sprintf(temp_label," da tile%d_%d\n", bank, idx);
|
||||||
|
AddString(result, temp_label);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int tileNo = 0; tileNo < numTiles; ++tileNo)
|
||||||
|
{
|
||||||
|
sprintf(temp_label,"tile%d_%d\n", bank, tileNo);
|
||||||
|
AddString(result, temp_label);
|
||||||
|
CompileTile(result, &pTilesData->data[ tileNo * 32 ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _usage()
|
||||||
|
{
|
||||||
|
printf("ftile v%s\n\n", VERSION);
|
||||||
|
printf("Usage: ftile <input_raw8x8_tile_file>\n"
|
||||||
|
"Written by Jason Andersen\n"
|
||||||
|
"Copyright (c) 2019 Jason Andersen.\n"
|
||||||
|
"Unauthorized use prohibited\n");
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
|
||||||
|
} // usage
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Parse command line options
|
||||||
|
//
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
// Check Arguments
|
||||||
|
while (--argc > 0 && (*++argv)[0] == '-')
|
||||||
|
{
|
||||||
|
*argv+=1;
|
||||||
|
|
||||||
|
if (strcmp("v", *argv) == 0)
|
||||||
|
{
|
||||||
|
printf("ftile v%s\n", VERSION);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
*argv+= strlen(*argv); // skip rest of string
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc != 1) _usage();
|
||||||
|
|
||||||
|
RAWDATA* pData = loadRaw(argv[0]);
|
||||||
|
RAWDATA* pSource = CompileTiles(pData,0);
|
||||||
|
|
||||||
|
char outname[256];
|
||||||
|
strcpy(outname, argv[0]);
|
||||||
|
int len = strlen(outname);
|
||||||
|
strcpy(outname+(len-2), "txt");
|
||||||
|
saveRaw(pSource, outname);
|
||||||
|
printf("\nftile - Processing complete.\n");
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
|
||||||
|
} // main
|
||||||
|
|
||||||
|
|
||||||
|
// eof - xrick2png.c
|
||||||
|
|
19
samples/apple2gs/gsos/bin/ftile/source/ftile.h
Normal file
19
samples/apple2gs/gsos/bin/ftile/source/ftile.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
#--------------------------------------------------------
|
||||||
|
# $File: ftile.h,v $
|
||||||
|
# $Author: jandersen $
|
||||||
|
# $Revision: #1 $
|
||||||
|
#--------------------------------------------------------
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _ftile_h
|
||||||
|
#define _ftile_h
|
||||||
|
|
||||||
|
#define VERSION "1.00"
|
||||||
|
|
||||||
|
#endif // _ftile_h
|
||||||
|
|
||||||
|
// EOF - ftile.h
|
||||||
|
|
||||||
|
|
53
samples/apple2gs/gsos/bin/ftile/source/rawdata.c
Normal file
53
samples/apple2gs/gsos/bin/ftile/source/rawdata.c
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "rawdata.h"
|
||||||
|
|
||||||
|
|
||||||
|
RAWDATA* loadRaw(const char* path)
|
||||||
|
{
|
||||||
|
FILE* rawFile = fopen( path, "rb" );
|
||||||
|
|
||||||
|
if (rawFile)
|
||||||
|
{
|
||||||
|
RAWDATA* pData = (RAWDATA*)malloc(sizeof(RAWDATA));
|
||||||
|
|
||||||
|
fseek(rawFile, 0, SEEK_END);
|
||||||
|
pData->size = ftell(rawFile);
|
||||||
|
|
||||||
|
fseek(rawFile, 0, SEEK_SET);
|
||||||
|
|
||||||
|
pData->data = (unsigned char*)malloc(pData->size);
|
||||||
|
|
||||||
|
size_t read_size = fread(pData->data, 1, pData->size, rawFile);
|
||||||
|
|
||||||
|
if (read_size != pData->size)
|
||||||
|
{
|
||||||
|
printf("WARNING: read %ld of %ld bytes\n", read_size, pData->size);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(rawFile);
|
||||||
|
|
||||||
|
return pData;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveRaw(RAWDATA* pData, const char* path)
|
||||||
|
{
|
||||||
|
FILE* rawFile = fopen( path, "wb" );
|
||||||
|
|
||||||
|
if (rawFile)
|
||||||
|
{
|
||||||
|
fwrite(pData->data, 1, pData->size, rawFile);
|
||||||
|
fclose(rawFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// rawdata.c
|
||||||
|
|
16
samples/apple2gs/gsos/bin/ftile/source/rawdata.h
Normal file
16
samples/apple2gs/gsos/bin/ftile/source/rawdata.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
#ifndef _rawdata_h_
|
||||||
|
#define _rawdata_h_
|
||||||
|
|
||||||
|
#include "bctypes.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned char* data; // pointer to data
|
||||||
|
size_t size; // size in bytes
|
||||||
|
} RAWDATA;
|
||||||
|
|
||||||
|
|
||||||
|
RAWDATA* loadRaw(const char* path);
|
||||||
|
void saveRaw(RAWDATA* pData, const char* path);
|
||||||
|
|
||||||
|
#endif //_rawdata_h_
|
249
samples/apple2gs/gsos/bin/png2c1/Program.cs
Normal file
249
samples/apple2gs/gsos/bin/png2c1/Program.cs
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace png2c1
|
||||||
|
{
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
public class spPalette
|
||||||
|
{
|
||||||
|
public List<Color> colors = new List<Color>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class spPixels
|
||||||
|
{
|
||||||
|
public int m_width;
|
||||||
|
public int m_height;
|
||||||
|
|
||||||
|
public List<byte> m_pixels = new List<byte>();
|
||||||
|
|
||||||
|
public spPixels(int width, int height, List<byte> pixels)
|
||||||
|
{
|
||||||
|
m_width = width;
|
||||||
|
m_height = height;
|
||||||
|
m_pixels = pixels;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
List<spPalette> pals = new List<spPalette>();
|
||||||
|
List<spPixels> pics = new List<spPixels>();
|
||||||
|
|
||||||
|
Console.WriteLine("png2c1");
|
||||||
|
Console.WriteLine("{0}", args.Length);
|
||||||
|
|
||||||
|
byte[] scbs = new byte[200]; // 200 scanlines
|
||||||
|
|
||||||
|
byte scb_index = 0;
|
||||||
|
|
||||||
|
foreach(string arg in args)
|
||||||
|
{
|
||||||
|
String pngPath = arg;
|
||||||
|
String palPath = Path.ChangeExtension(pngPath, ".pal");
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Read in the palette file (thanks Pro Motion)
|
||||||
|
Console.WriteLine($"Loading {palPath}");
|
||||||
|
|
||||||
|
spPalette pal = new spPalette();
|
||||||
|
|
||||||
|
using (FileStream palStream = new FileStream(palPath, FileMode.Open, FileAccess.Read))
|
||||||
|
{
|
||||||
|
for(int idx = 0; idx < 16; ++idx)
|
||||||
|
{
|
||||||
|
int r = palStream.ReadByte();
|
||||||
|
int g = palStream.ReadByte();
|
||||||
|
int b = palStream.ReadByte();
|
||||||
|
|
||||||
|
pal.colors.Add(Color.FromArgb(255, r, g, b));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Put it in the list
|
||||||
|
pals.Add(pal);
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Read in the image file
|
||||||
|
Console.WriteLine($"Loading {pngPath}");
|
||||||
|
|
||||||
|
using (var image = new Bitmap(System.Drawing.Image.FromFile(pngPath)))
|
||||||
|
{
|
||||||
|
//Bitmap image = new Bitmap(pngStream);
|
||||||
|
Console.WriteLine("{0} width={1}, height={2}",pngPath, image.Width, image.Height);
|
||||||
|
|
||||||
|
List<byte> pixels = new List<byte>();
|
||||||
|
|
||||||
|
for (int y = 0; y < image.Height; ++y)
|
||||||
|
{
|
||||||
|
Color p = image.GetPixel(0,y);
|
||||||
|
|
||||||
|
if (255 == p.A)
|
||||||
|
{
|
||||||
|
scbs[ y ] = scb_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (int x = 0; x < image.Width; x+=2)
|
||||||
|
{
|
||||||
|
Color p0 = image.GetPixel(x,y);
|
||||||
|
Color p1 = image.GetPixel(x+1,y);
|
||||||
|
|
||||||
|
int idx0 = GetIndex(ref pal.colors, p0);
|
||||||
|
int idx1 = GetIndex(ref pal.colors, p1);
|
||||||
|
|
||||||
|
byte pb = (byte)((idx0<<4) | (idx1));
|
||||||
|
|
||||||
|
pixels.Add( pb );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
spPixels pic = new spPixels(image.Width, image.Height, pixels);
|
||||||
|
pics.Add(pic);
|
||||||
|
}
|
||||||
|
|
||||||
|
scb_index++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//foreach (byte scb in scbs)
|
||||||
|
//{
|
||||||
|
// Console.WriteLine("{0:X2}", scb);
|
||||||
|
//}
|
||||||
|
|
||||||
|
String outPath = Path.ChangeExtension(args[0], ".c1");
|
||||||
|
|
||||||
|
Console.WriteLine("Saving {0}", outPath);
|
||||||
|
|
||||||
|
using (BinaryWriter b = new BinaryWriter(
|
||||||
|
File.Open(outPath, FileMode.Create)))
|
||||||
|
{
|
||||||
|
for (int y = 0; y < scbs.Length; ++y)
|
||||||
|
{
|
||||||
|
int imageIdx = scbs[ y ];
|
||||||
|
spPixels pix = pics[ imageIdx ];
|
||||||
|
|
||||||
|
int pixIndex = 160 * y;
|
||||||
|
|
||||||
|
// Write out the scanline of pix
|
||||||
|
for (int idx = 0; idx < 160; ++idx)
|
||||||
|
{
|
||||||
|
b.Write((byte)pix.m_pixels[ pixIndex + idx ]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save out the scbs
|
||||||
|
b.Write(scbs);
|
||||||
|
|
||||||
|
// Pad out the page
|
||||||
|
for (int idx = 0; idx < 56; ++idx)
|
||||||
|
{
|
||||||
|
b.Write((byte)0x00);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save out the palettes
|
||||||
|
for (int palIdx = 0; palIdx < 16; ++palIdx)
|
||||||
|
{
|
||||||
|
if (palIdx < pals.Count)
|
||||||
|
{
|
||||||
|
spPalette pal = pals[ palIdx ];
|
||||||
|
|
||||||
|
for (int idx = 0; idx < 16; ++idx)
|
||||||
|
{
|
||||||
|
UInt16 rgb = ToGSColor(pal.colors[idx]);
|
||||||
|
b.Write(rgb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int idx = 0; idx < 16; ++idx)
|
||||||
|
{
|
||||||
|
b.Write((UInt16)0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get a IIgs color
|
||||||
|
//
|
||||||
|
static UInt16 ToGSColor( Color pixel )
|
||||||
|
{
|
||||||
|
int red = pixel.R;
|
||||||
|
int green = pixel.G;
|
||||||
|
int blue = pixel.B;
|
||||||
|
|
||||||
|
// we want to round up if it's needed
|
||||||
|
red+=8;
|
||||||
|
green+=8;
|
||||||
|
blue+=8;
|
||||||
|
if (red > 255) red = 255;
|
||||||
|
if (green > 255) green = 255;
|
||||||
|
if (blue > 255) blue = 255;
|
||||||
|
|
||||||
|
red >>= 4;
|
||||||
|
green >>= 4;
|
||||||
|
blue >>= 4;
|
||||||
|
|
||||||
|
int color = (red << 8) |
|
||||||
|
(green << 4) |
|
||||||
|
(blue);
|
||||||
|
|
||||||
|
return (UInt16)color;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get the Closest Matching Palette Index
|
||||||
|
//
|
||||||
|
static int GetIndex(ref List<Color> pal, Color pixel)
|
||||||
|
{
|
||||||
|
byte result_index = 0;
|
||||||
|
|
||||||
|
if (pal.Count > 0)
|
||||||
|
{
|
||||||
|
List<float> dist = new List<float>();
|
||||||
|
|
||||||
|
for (int idx = 0; idx < pal.Count; ++idx)
|
||||||
|
{
|
||||||
|
float delta = ColorDelta(pal[idx], pixel);
|
||||||
|
dist.Add(delta);
|
||||||
|
|
||||||
|
// Make sure the result_index is the one
|
||||||
|
// with the least amount of error
|
||||||
|
if (dist[idx] < dist[result_index])
|
||||||
|
{
|
||||||
|
result_index = (byte)idx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
static float ColorDelta(Color c0, Color c1)
|
||||||
|
{
|
||||||
|
// Y=0.2126R+0.7152G+0.0722B
|
||||||
|
float r = (c0.R-c1.R);
|
||||||
|
r = r * r;
|
||||||
|
r *= 0.2126f;
|
||||||
|
|
||||||
|
float g = (c0.G-c1.G);
|
||||||
|
g = g * g;
|
||||||
|
g *= 0.7152f;
|
||||||
|
|
||||||
|
float b = (c0.B-c1.B);
|
||||||
|
b = b * b;
|
||||||
|
b *= 0.0722f;
|
||||||
|
|
||||||
|
return r + g + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
BIN
samples/apple2gs/gsos/bin/png2c1/background.pal
Normal file
BIN
samples/apple2gs/gsos/bin/png2c1/background.pal
Normal file
Binary file not shown.
BIN
samples/apple2gs/gsos/bin/png2c1/background.png
Normal file
BIN
samples/apple2gs/gsos/bin/png2c1/background.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
12
samples/apple2gs/gsos/bin/png2c1/png2c1.csproj
Normal file
12
samples/apple2gs/gsos/bin/png2c1/png2c1.csproj
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="System.Drawing.Common" Version="4.5.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
202
samples/apple2gs/gsos/bin/png2tiles/Program.cs
Normal file
202
samples/apple2gs/gsos/bin/png2tiles/Program.cs
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace png2tiles
|
||||||
|
{
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
public class spPalette
|
||||||
|
{
|
||||||
|
public List<Color> colors = new List<Color>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class spPixels
|
||||||
|
{
|
||||||
|
public int m_width;
|
||||||
|
public int m_height;
|
||||||
|
|
||||||
|
public List<byte> m_pixels = new List<byte>();
|
||||||
|
|
||||||
|
public spPixels(int width, int height, List<byte> pixels)
|
||||||
|
{
|
||||||
|
m_width = width;
|
||||||
|
m_height = height;
|
||||||
|
m_pixels = pixels;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
List<spPalette> pals = new List<spPalette>();
|
||||||
|
List<spPixels> pics = new List<spPixels>();
|
||||||
|
|
||||||
|
Console.WriteLine("png2tiles");
|
||||||
|
Console.WriteLine("{0}", args.Length);
|
||||||
|
|
||||||
|
foreach(string arg in args)
|
||||||
|
{
|
||||||
|
String pngPath = arg;
|
||||||
|
String palPath = Path.ChangeExtension(pngPath, ".pal");
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Read in the palette file (thanks Pro Motion)
|
||||||
|
Console.WriteLine($"Loading {palPath}");
|
||||||
|
|
||||||
|
spPalette pal = new spPalette();
|
||||||
|
|
||||||
|
using (FileStream palStream = new FileStream(palPath, FileMode.Open, FileAccess.Read))
|
||||||
|
{
|
||||||
|
for(int idx = 0; idx < 16; ++idx)
|
||||||
|
{
|
||||||
|
int r = palStream.ReadByte();
|
||||||
|
int g = palStream.ReadByte();
|
||||||
|
int b = palStream.ReadByte();
|
||||||
|
|
||||||
|
pal.colors.Add(Color.FromArgb(255, r, g, b));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Put it in the list
|
||||||
|
pals.Add(pal);
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Read in the image file
|
||||||
|
Console.WriteLine($"Loading {pngPath}");
|
||||||
|
|
||||||
|
using (var image = new Bitmap(System.Drawing.Image.FromFile(pngPath)))
|
||||||
|
{
|
||||||
|
//Bitmap image = new Bitmap(pngStream);
|
||||||
|
Console.WriteLine("{0} width={1}, height={2}",pngPath, image.Width, image.Height);
|
||||||
|
|
||||||
|
List<byte> pixels = new List<byte>();
|
||||||
|
|
||||||
|
for (int y = 0; y < image.Height; ++y)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < image.Width; x+=2)
|
||||||
|
{
|
||||||
|
Color p0 = image.GetPixel(x,y);
|
||||||
|
Color p1 = image.GetPixel(x+1,y);
|
||||||
|
|
||||||
|
int idx0 = GetIndex(ref pal.colors, p0);
|
||||||
|
int idx1 = GetIndex(ref pal.colors, p1);
|
||||||
|
|
||||||
|
byte pb = (byte)((idx0<<4) | (idx1));
|
||||||
|
|
||||||
|
pixels.Add( pb );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
spPixels pic = new spPixels(image.Width, image.Height, pixels);
|
||||||
|
pics.Add(pic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String outPath = Path.ChangeExtension(args[0], ".gs");
|
||||||
|
|
||||||
|
Console.WriteLine("Saving {0}", outPath);
|
||||||
|
|
||||||
|
using (BinaryWriter b = new BinaryWriter(
|
||||||
|
File.Open(outPath, FileMode.Create)))
|
||||||
|
{
|
||||||
|
spPixels pix = pics[ 0 ];
|
||||||
|
|
||||||
|
for (int y = 0; y < pix.m_height; y+=8)
|
||||||
|
{
|
||||||
|
for (int x = 0; x<pix.m_width; x+=8)
|
||||||
|
{
|
||||||
|
int offset = y * (pix.m_width>>1) + (x >> 1);
|
||||||
|
|
||||||
|
for (int idy = 0; idy < 8; ++idy)
|
||||||
|
{
|
||||||
|
int boffset = offset + (idy * (pix.m_width>>1));
|
||||||
|
|
||||||
|
for (int idx = 0; idx < 4; ++idx)
|
||||||
|
{
|
||||||
|
b.Write((byte)pix.m_pixels[ boffset + idx ]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get a IIgs color
|
||||||
|
//
|
||||||
|
static UInt16 ToGSColor( Color pixel )
|
||||||
|
{
|
||||||
|
int red = pixel.R;
|
||||||
|
int green = pixel.G;
|
||||||
|
int blue = pixel.B;
|
||||||
|
|
||||||
|
// we want to round up if it's needed
|
||||||
|
red+=8;
|
||||||
|
green+=8;
|
||||||
|
blue+=8;
|
||||||
|
if (red > 255) red = 255;
|
||||||
|
if (green > 255) green = 255;
|
||||||
|
if (blue > 255) blue = 255;
|
||||||
|
|
||||||
|
red >>= 4;
|
||||||
|
green >>= 4;
|
||||||
|
blue >>= 4;
|
||||||
|
|
||||||
|
int color = (red << 8) |
|
||||||
|
(green << 4) |
|
||||||
|
(blue);
|
||||||
|
|
||||||
|
return (UInt16)color;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get the Closest Matching Palette Index
|
||||||
|
//
|
||||||
|
static int GetIndex(ref List<Color> pal, Color pixel)
|
||||||
|
{
|
||||||
|
byte result_index = 0;
|
||||||
|
|
||||||
|
if (pal.Count > 0)
|
||||||
|
{
|
||||||
|
List<float> dist = new List<float>();
|
||||||
|
|
||||||
|
for (int idx = 0; idx < pal.Count; ++idx)
|
||||||
|
{
|
||||||
|
float delta = ColorDelta(pal[idx], pixel);
|
||||||
|
dist.Add(delta);
|
||||||
|
|
||||||
|
// Make sure the result_index is the one
|
||||||
|
// with the least amount of error
|
||||||
|
if (dist[idx] < dist[result_index])
|
||||||
|
{
|
||||||
|
result_index = (byte)idx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
static float ColorDelta(Color c0, Color c1)
|
||||||
|
{
|
||||||
|
// Y=0.2126R+0.7152G+0.0722B
|
||||||
|
float r = (c0.R-c1.R);
|
||||||
|
r = r * r;
|
||||||
|
r *= 0.2126f;
|
||||||
|
|
||||||
|
float g = (c0.G-c1.G);
|
||||||
|
g = g * g;
|
||||||
|
g *= 0.7152f;
|
||||||
|
|
||||||
|
float b = (c0.B-c1.B);
|
||||||
|
b = b * b;
|
||||||
|
b *= 0.0722f;
|
||||||
|
|
||||||
|
return r + g + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
BIN
samples/apple2gs/gsos/bin/png2tiles/null_terminator.gs
Normal file
BIN
samples/apple2gs/gsos/bin/png2tiles/null_terminator.gs
Normal file
Binary file not shown.
BIN
samples/apple2gs/gsos/bin/png2tiles/null_terminator.pal
Normal file
BIN
samples/apple2gs/gsos/bin/png2tiles/null_terminator.pal
Normal file
Binary file not shown.
BIN
samples/apple2gs/gsos/bin/png2tiles/null_terminator.png
Normal file
BIN
samples/apple2gs/gsos/bin/png2tiles/null_terminator.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
12
samples/apple2gs/gsos/bin/png2tiles/png2tiles.csproj
Normal file
12
samples/apple2gs/gsos/bin/png2tiles/png2tiles.csproj
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="System.Drawing.Common" Version="4.5.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
1
samples/apple2gs/gsos/bin/png2tiles/run.bat
Normal file
1
samples/apple2gs/gsos/bin/png2tiles/run.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
dotnet run null_terminator.png
|
BIN
samples/apple2gs/gsos/data/background.c1
Normal file
BIN
samples/apple2gs/gsos/data/background.c1
Normal file
Binary file not shown.
BIN
samples/apple2gs/gsos/fun2gs.po
Normal file
BIN
samples/apple2gs/gsos/fun2gs.po
Normal file
Binary file not shown.
BIN
samples/apple2gs/gsos/fun2gs.sys16
Normal file
BIN
samples/apple2gs/gsos/fun2gs.sys16
Normal file
Binary file not shown.
17
samples/apple2gs/gsos/link.s
Normal file
17
samples/apple2gs/gsos/link.s
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// fun2gs linker file
|
||||||
|
//
|
||||||
|
; Stack, and Direct page space
|
||||||
|
; in Bank0
|
||||||
|
section DirectPage_Stack,BSS
|
||||||
|
ds.b 1024
|
||||||
|
|
||||||
|
incobj "start.x65"
|
||||||
|
incobj "dbgfnt.x65"
|
||||||
|
incobj "lz4.x65"
|
||||||
|
incobj "blit.x65"
|
||||||
|
incobj "background.x65"
|
||||||
|
|
||||||
|
; Get these things in the same bank
|
||||||
|
;Merge start,dbgfont
|
||||||
|
|
161
samples/apple2gs/gsos/macros/Locator.Macs.s
Normal file
161
samples/apple2gs/gsos/macros/Locator.Macs.s
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
* Tool Locator macros
|
||||||
|
* by Dave Klimas
|
||||||
|
;
|
||||||
|
; Copyright Apple Computer, Inc. 1986, 1987
|
||||||
|
; and Roger Wagner Publishing, Inc. 1988
|
||||||
|
; All Rights Reserved
|
||||||
|
;
|
||||||
|
macro _TLBootInit
|
||||||
|
{
|
||||||
|
Tool $101
|
||||||
|
}
|
||||||
|
macro _TLStartUp
|
||||||
|
{
|
||||||
|
Tool $201
|
||||||
|
}
|
||||||
|
macro _TLShutDown
|
||||||
|
{
|
||||||
|
Tool $301
|
||||||
|
}
|
||||||
|
;~TLVersion MAC
|
||||||
|
; PHA
|
||||||
|
macro _TLVersion
|
||||||
|
{
|
||||||
|
Tool $401
|
||||||
|
}
|
||||||
|
macro _TLReset
|
||||||
|
{
|
||||||
|
Tool $501
|
||||||
|
}
|
||||||
|
;~TLStatus MAC
|
||||||
|
; PHA
|
||||||
|
macro _TLStatus
|
||||||
|
{
|
||||||
|
Tool $601
|
||||||
|
}
|
||||||
|
;~GetTSPtr MAC
|
||||||
|
; PHS 2
|
||||||
|
; PxW ]1;]2
|
||||||
|
macro _GetTSPtr
|
||||||
|
{
|
||||||
|
Tool $901
|
||||||
|
}
|
||||||
|
;~SetTSPtr MAC
|
||||||
|
; PxW ]1;]2
|
||||||
|
; PHL ]3
|
||||||
|
macro _SetTSPtr
|
||||||
|
{
|
||||||
|
Tool $A01
|
||||||
|
}
|
||||||
|
;~GetFuncPtr MAC
|
||||||
|
; PHS 2
|
||||||
|
; PxW ]1;]2
|
||||||
|
macro _GetFuncPtr
|
||||||
|
{
|
||||||
|
Tool $B01
|
||||||
|
}
|
||||||
|
;~GetWAP MAC
|
||||||
|
; PHS 2
|
||||||
|
; PxW ]1;]2
|
||||||
|
macro _GetWAP
|
||||||
|
{
|
||||||
|
Tool $C01
|
||||||
|
}
|
||||||
|
;~SetWAP MAC
|
||||||
|
; PxW ]1;]2
|
||||||
|
; PHL ]3
|
||||||
|
macro _SetWAP
|
||||||
|
{
|
||||||
|
Tool $D01
|
||||||
|
}
|
||||||
|
;~LoadTools MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _LoadTools
|
||||||
|
{
|
||||||
|
Tool $E01
|
||||||
|
}
|
||||||
|
;~LoadOneTool MAC
|
||||||
|
; PxW ]1;]2
|
||||||
|
macro _LoadOneTool
|
||||||
|
{
|
||||||
|
Tool $F01
|
||||||
|
}
|
||||||
|
;~UnloadOneTool MAC
|
||||||
|
; PHW ]1
|
||||||
|
macro _UnloadOneTool
|
||||||
|
{
|
||||||
|
Tool $1001
|
||||||
|
}
|
||||||
|
;~TLMountVolume MAC
|
||||||
|
; PHA
|
||||||
|
; PxW ]1;]2
|
||||||
|
; PxL ]3;]4;]5;]6
|
||||||
|
macro _TLMountVolume
|
||||||
|
{
|
||||||
|
Tool $1101
|
||||||
|
}
|
||||||
|
;~TLTextMountVolume MAC
|
||||||
|
; PHA
|
||||||
|
; PxL ]1;]2;]3;]4
|
||||||
|
macro _TLTextMountVolume
|
||||||
|
{
|
||||||
|
Tool $1201
|
||||||
|
}
|
||||||
|
;~SaveTextState MAC
|
||||||
|
; PHS 2
|
||||||
|
macro _SaveTextState
|
||||||
|
{
|
||||||
|
Tool $1301
|
||||||
|
}
|
||||||
|
;~RestoreTextState MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _RestoreTextState
|
||||||
|
{
|
||||||
|
Tool $1401
|
||||||
|
}
|
||||||
|
;~MessageCenter MAC
|
||||||
|
; PxW ]1;]2
|
||||||
|
; PHL ]3
|
||||||
|
macro _MessageCenter
|
||||||
|
{
|
||||||
|
Tool $1501
|
||||||
|
}
|
||||||
|
macro _SetDefaultTPT
|
||||||
|
{
|
||||||
|
Tool $1601
|
||||||
|
}
|
||||||
|
;~MessageByName MAC
|
||||||
|
; PHS 2
|
||||||
|
; PHWL ]1;]2
|
||||||
|
; PxW ]3;]4
|
||||||
|
macro _MessageByName
|
||||||
|
{
|
||||||
|
Tool $1701
|
||||||
|
}
|
||||||
|
;~StartUpTools MAC
|
||||||
|
; PHA
|
||||||
|
; PxW ]1;]2
|
||||||
|
; PxL ]3;]4
|
||||||
|
macro _StartUpTools
|
||||||
|
{
|
||||||
|
Tool $1801
|
||||||
|
}
|
||||||
|
;~ShutDownTools MAC
|
||||||
|
; PHWL ]1;]2
|
||||||
|
macro _ShutDownTools
|
||||||
|
{
|
||||||
|
Tool $1901
|
||||||
|
}
|
||||||
|
macro _GetMsgHandle
|
||||||
|
{
|
||||||
|
Tool $1A01
|
||||||
|
}
|
||||||
|
macro _AcceptRequests
|
||||||
|
{
|
||||||
|
Tool $1B01
|
||||||
|
}
|
||||||
|
macro _SendRequest
|
||||||
|
{
|
||||||
|
Tool $1C01
|
||||||
|
}
|
||||||
|
|
214
samples/apple2gs/gsos/macros/Mem.Macs.s
Normal file
214
samples/apple2gs/gsos/macros/Mem.Macs.s
Normal file
@ -0,0 +1,214 @@
|
|||||||
|
* Memory Manager macros
|
||||||
|
* by Dave Klimas
|
||||||
|
;
|
||||||
|
; Copyright Apple Computer, Inc. 1986, 1987
|
||||||
|
; and Roger Wagner Publishing, Inc. 1988
|
||||||
|
; All Rights Reserved
|
||||||
|
;
|
||||||
|
macro _MMBootInit
|
||||||
|
{
|
||||||
|
Tool $102
|
||||||
|
}
|
||||||
|
;~MMStartUp MAC
|
||||||
|
; PHA
|
||||||
|
macro _MMStartUp
|
||||||
|
{
|
||||||
|
Tool $202
|
||||||
|
}
|
||||||
|
;~MMShutDown MAC
|
||||||
|
; PHW ]1
|
||||||
|
macro _MMShutDown
|
||||||
|
{
|
||||||
|
Tool $302
|
||||||
|
}
|
||||||
|
;~MMVersion MAC
|
||||||
|
; PHA
|
||||||
|
macro _MMVersion
|
||||||
|
{
|
||||||
|
Tool $402
|
||||||
|
}
|
||||||
|
macro _MMReset
|
||||||
|
{
|
||||||
|
Tool $502
|
||||||
|
}
|
||||||
|
;~MMStatus MAC
|
||||||
|
; PHA
|
||||||
|
macro _MMStatus
|
||||||
|
{
|
||||||
|
Tool $602
|
||||||
|
}
|
||||||
|
;~NewHandle MAC
|
||||||
|
; P2SL ]1
|
||||||
|
; PxW ]2;]3
|
||||||
|
; PHL ]4
|
||||||
|
macro _NewHandle
|
||||||
|
{
|
||||||
|
Tool $902
|
||||||
|
}
|
||||||
|
;~ReallocHandle MAC
|
||||||
|
; PHLW ]1;]2
|
||||||
|
; PHWL ]3;]4
|
||||||
|
; PHL ]5
|
||||||
|
macro _ReallocHandle
|
||||||
|
{
|
||||||
|
Tool $A02
|
||||||
|
}
|
||||||
|
;~RestoreHandle MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _RestoreHandle
|
||||||
|
{
|
||||||
|
Tool $B02
|
||||||
|
}
|
||||||
|
;~AddToOOMQueue MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _AddToOOMQueue
|
||||||
|
{
|
||||||
|
Tool $C02
|
||||||
|
}
|
||||||
|
;~DeleteFromOOMQueue MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _DeleteFromOOMQueue
|
||||||
|
{
|
||||||
|
Tool $D02
|
||||||
|
}
|
||||||
|
;~DisposeHandle MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _DisposeHandle
|
||||||
|
{
|
||||||
|
Tool $1002
|
||||||
|
}
|
||||||
|
;~DisposeAll MAC
|
||||||
|
; PHW ]1
|
||||||
|
macro _DisposeAll
|
||||||
|
{
|
||||||
|
Tool $1102
|
||||||
|
}
|
||||||
|
;~PurgeHandle MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _PurgeHandle
|
||||||
|
{
|
||||||
|
Tool $1202
|
||||||
|
}
|
||||||
|
;~PurgeAll MAC
|
||||||
|
; PHW ]1
|
||||||
|
macro _PurgeAll
|
||||||
|
{
|
||||||
|
Tool $1302
|
||||||
|
}
|
||||||
|
;~GetHandleSize MAC
|
||||||
|
; P2SL ]1
|
||||||
|
macro _GetHandleSize
|
||||||
|
{
|
||||||
|
Tool $1802
|
||||||
|
}
|
||||||
|
;~SetHandleSize MAC
|
||||||
|
; PxL ]1;]2
|
||||||
|
macro _SetHandleSize
|
||||||
|
{
|
||||||
|
Tool $1902
|
||||||
|
}
|
||||||
|
;~FindHandle MAC
|
||||||
|
; P2SL ]1
|
||||||
|
macro _FindHandle
|
||||||
|
{
|
||||||
|
Tool $1A02
|
||||||
|
}
|
||||||
|
;~FreeMem MAC
|
||||||
|
; PHS 2
|
||||||
|
macro _FreeMem
|
||||||
|
{
|
||||||
|
Tool $1B02
|
||||||
|
}
|
||||||
|
;~MaxBlock MAC
|
||||||
|
; PHS 2
|
||||||
|
macro _MaxBlock
|
||||||
|
{
|
||||||
|
Tool $1C02
|
||||||
|
}
|
||||||
|
;~TotalMem MAC
|
||||||
|
; PHS 2
|
||||||
|
macro _TotalMem
|
||||||
|
{
|
||||||
|
Tool $1D02
|
||||||
|
}
|
||||||
|
;~CheckHandle MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _CheckHandle
|
||||||
|
{
|
||||||
|
Tool $1E02
|
||||||
|
}
|
||||||
|
macro _CompactMem
|
||||||
|
{
|
||||||
|
Tool $1F02
|
||||||
|
}
|
||||||
|
;~HLock MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _HLock
|
||||||
|
{
|
||||||
|
Tool $2002
|
||||||
|
}
|
||||||
|
;~HLockAll MAC
|
||||||
|
; PHW ]1
|
||||||
|
macro _HLockAll
|
||||||
|
{
|
||||||
|
Tool $2102
|
||||||
|
}
|
||||||
|
;~HUnlock MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _HUnlock
|
||||||
|
{
|
||||||
|
Tool $2202
|
||||||
|
}
|
||||||
|
;~HUnlockAll MAC
|
||||||
|
; PHW ]1
|
||||||
|
macro _HUnlockAll
|
||||||
|
{
|
||||||
|
Tool $2302
|
||||||
|
}
|
||||||
|
;~SetPurge MAC
|
||||||
|
; PHWL ]1;]2
|
||||||
|
macro _SetPurge
|
||||||
|
{
|
||||||
|
Tool $2402
|
||||||
|
}
|
||||||
|
;~SetPurgeAll MAC
|
||||||
|
; PxW ]1;]2
|
||||||
|
macro _SetPurgeAll
|
||||||
|
{
|
||||||
|
Tool $2502
|
||||||
|
}
|
||||||
|
;~PtrToHand MAC
|
||||||
|
; PxL ]1;]2;]3
|
||||||
|
macro _PtrToHand
|
||||||
|
{
|
||||||
|
Tool $2802
|
||||||
|
}
|
||||||
|
;~HandToPtr MAC
|
||||||
|
; PxL ]1;]2;]3
|
||||||
|
macro _HandToPtr
|
||||||
|
{
|
||||||
|
Tool $2902
|
||||||
|
}
|
||||||
|
;~HandToHand MAC
|
||||||
|
; PxL ]1;]2;3
|
||||||
|
macro _HandToHand
|
||||||
|
{
|
||||||
|
Tool $2A02
|
||||||
|
}
|
||||||
|
;~BlockMove MAC
|
||||||
|
; PxL ]1;]2;]3
|
||||||
|
macro _BlockMove
|
||||||
|
{
|
||||||
|
Tool $2B02
|
||||||
|
}
|
||||||
|
;~RealFreeMem MAC
|
||||||
|
; PHS 2
|
||||||
|
macro _RealFreeMem
|
||||||
|
{
|
||||||
|
Tool $2F02
|
||||||
|
}
|
||||||
|
macro _SetHandleID
|
||||||
|
{
|
||||||
|
Tool $3002
|
||||||
|
}
|
||||||
|
|
338
samples/apple2gs/gsos/macros/Misc.Macs.s
Normal file
338
samples/apple2gs/gsos/macros/Misc.Macs.s
Normal file
@ -0,0 +1,338 @@
|
|||||||
|
* Misc Tool macros
|
||||||
|
* by Dave Klimas
|
||||||
|
;
|
||||||
|
; Copyright Apple Computer, Inc. 1986, 1987
|
||||||
|
; and Roger Wagner Publishing, Inc. 1988
|
||||||
|
; All Rights Reserved
|
||||||
|
;
|
||||||
|
macro _MTBootInit
|
||||||
|
{
|
||||||
|
Tool $103
|
||||||
|
}
|
||||||
|
macro _MTStartUp
|
||||||
|
{
|
||||||
|
Tool $203
|
||||||
|
}
|
||||||
|
macro _MTShutDown
|
||||||
|
{
|
||||||
|
Tool $303
|
||||||
|
}
|
||||||
|
;~MTVersion MAC
|
||||||
|
; PHA
|
||||||
|
macro _MTVersion
|
||||||
|
{
|
||||||
|
Tool $403
|
||||||
|
}
|
||||||
|
macro _MTReset
|
||||||
|
{
|
||||||
|
Tool $503
|
||||||
|
}
|
||||||
|
;~MTStatus MAC
|
||||||
|
; PHA
|
||||||
|
macro _MTStatus
|
||||||
|
{
|
||||||
|
Tool $603
|
||||||
|
}
|
||||||
|
;~WriteBRam MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _WriteBRam
|
||||||
|
{
|
||||||
|
Tool $903
|
||||||
|
}
|
||||||
|
;~ReadBRam MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _ReadBRam
|
||||||
|
{
|
||||||
|
Tool $A03
|
||||||
|
}
|
||||||
|
;~WriteBParam MAC
|
||||||
|
; PxW ]1;]2
|
||||||
|
macro _WriteBParam
|
||||||
|
{
|
||||||
|
Tool $B03
|
||||||
|
}
|
||||||
|
;~ReadBParam MAC
|
||||||
|
; P1SW ]1
|
||||||
|
macro _ReadBParam
|
||||||
|
{
|
||||||
|
Tool $C03
|
||||||
|
}
|
||||||
|
;~ReadTimeHex MAC
|
||||||
|
; PHS 4
|
||||||
|
macro _ReadTimeHex
|
||||||
|
{
|
||||||
|
Tool $D03
|
||||||
|
}
|
||||||
|
;~WriteTimeHex MAC
|
||||||
|
; PxW ]1;]2;]3
|
||||||
|
macro _WriteTimeHex
|
||||||
|
{
|
||||||
|
Tool $E03
|
||||||
|
}
|
||||||
|
;~ReadAsciiTime MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _ReadAsciiTime
|
||||||
|
{
|
||||||
|
Tool $F03
|
||||||
|
}
|
||||||
|
;~SetVector MAC
|
||||||
|
; PHWL ]1;]2
|
||||||
|
macro _SetVector
|
||||||
|
{
|
||||||
|
Tool $1003
|
||||||
|
}
|
||||||
|
;~GetVector MAC
|
||||||
|
; P2SW ]1
|
||||||
|
macro _GetVector
|
||||||
|
{
|
||||||
|
Tool $1103
|
||||||
|
}
|
||||||
|
;~SetHeartBeat MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _SetHeartBeat
|
||||||
|
{
|
||||||
|
Tool $1203
|
||||||
|
}
|
||||||
|
;~DelHeartBeat MAC
|
||||||
|
; PHL ]1
|
||||||
|
macro _DelHeartBeat
|
||||||
|
{
|
||||||
|
Tool $1303
|
||||||
|
}
|
||||||
|
macro _ClrHeartBeat
|
||||||
|
{
|
||||||
|
Tool $1403
|
||||||
|
}
|
||||||
|
;~SysFailMgr MAC
|
||||||
|
; PHWL ]1;]2
|
||||||
|
macro _SysFailMgr
|
||||||
|
{
|
||||||
|
Tool $1503
|
||||||
|
}
|
||||||
|
;~GetAddr MAC
|
||||||
|
; P2SW ]1
|
||||||
|
macro _GetAddr
|
||||||
|
{
|
||||||
|
Tool $1603
|
||||||
|
}
|
||||||
|
;~ReadMouse MAC
|
||||||
|
; PHS 3
|
||||||
|
macro _ReadMouse
|
||||||
|
{
|
||||||
|
Tool $1703
|
||||||
|
}
|
||||||
|
;~InitMouse MAC
|
||||||
|
; PHW ]1
|
||||||
|
macro _InitMouse
|
||||||
|
{
|
||||||
|
Tool $1803
|
||||||
|
}
|
||||||
|
;~SetMouse MAC
|
||||||
|
; PHW ]1
|
||||||
|
macro _SetMouse
|
||||||
|
{
|
||||||
|
Tool $1903
|
||||||
|
}
|
||||||
|
macro _HomeMouse
|
||||||
|
{
|
||||||
|
Tool $1A03
|
||||||
|
}
|
||||||
|
macro _ClearMouse
|
||||||
|
{
|
||||||
|
Tool $1B03
|
||||||
|
}
|
||||||
|
;~ClampMouse MAC
|
||||||
|
; PxW ]1;]2;]3;]4
|
||||||
|
macro _ClampMouse
|
||||||
|
{
|
||||||
|
Tool $1C03
|
||||||
|
}
|
||||||
|
;~GetMouseClamp MAC
|
||||||
|
; PHS 4
|
||||||
|
macro _GetMouseClamp
|
||||||
|
{
|
||||||
|
Tool $1D03
|
||||||
|
}
|
||||||
|
;~PosMouse MAC
|
||||||
|
; PxW ]1;]2
|
||||||
|
macro _PosMouse
|
||||||
|
{
|
||||||
|
Tool $1E03
|
||||||
|
}
|
||||||
|
;~ServeMouse MAC
|
||||||
|
; PHA
|
||||||
|
macro _ServeMouse
|
||||||
|
{
|
||||||
|
Tool $1F03
|
||||||
|
}
|
||||||
|
;~GetNewID MAC
|
||||||
|
; P1SW ]1
|
||||||
|
macro _GetNewID
|
||||||
|
{
|
||||||
|
Tool $2003
|
||||||
|
}
|
||||||
|
;~DeleteID MAC
|
||||||
|
; PHW ]1
|
||||||
|
macro _DeleteID
|
||||||
|
{
|
||||||
|
Tool $2103
|
||||||
|
}
|
||||||
|
;~StatusID MAC
|
||||||
|
; PHW ]1
|
||||||
|
macro _StatusID
|
||||||
|
{
|
||||||
|
Tool $2203
|
||||||
|
}
|
||||||
|
;~IntSource MAC
|
||||||
|
; PHW ]1
|
||||||
|
macro _IntSource
|
||||||
|
{
|
||||||
|
Tool $2303
|
||||||
|
}
|
||||||
|
;~FWEntry MAC
|
||||||
|
; PHS 4
|
||||||
|
; PxW ]1;]2;]3;]4
|
||||||
|
macro _FWEntry
|
||||||
|
{
|
||||||
|
Tool $2403
|
||||||
|
}
|
||||||
|
;~GetTick MAC
|
||||||
|
; PHS 2
|
||||||
|
macro _GetTick
|
||||||
|
{
|
||||||
|
Tool $2503
|
||||||
|
}
|
||||||
|
;~PackBytes MAC
|
||||||
|
; P1SL ]1
|
||||||
|
; PxL ]2;]3
|
||||||
|
; PHW ]4
|
||||||
|
macro _PackBytes
|
||||||
|
{
|
||||||
|
Tool $2603
|
||||||
|
}
|
||||||
|
;~UnPackBytes MAC
|
||||||
|
; P1SL ]1
|
||||||
|
; PHW ]2
|
||||||
|
; PxL ]3;]4
|
||||||
|
macro _UnPackBytes
|
||||||
|
{
|
||||||
|
Tool $2703
|
||||||
|
}
|
||||||
|
;~Munger MAC
|
||||||
|
; P1SL ]1
|
||||||
|
; PxL ]2;]3
|
||||||
|
; PHWL ]4;]5
|
||||||
|
; PHWL ]6;]7
|
||||||
|
macro _Munger
|
||||||
|
{
|
||||||
|
Tool $2803
|
||||||
|
}
|
||||||
|
;~GetIRQEnable MAC
|
||||||
|
; PHA
|
||||||
|
macro _GetIRQEnable
|
||||||
|
{
|
||||||
|
Tool $2903
|
||||||
|
}
|
||||||
|
;~SetAbsClamp MAC
|
||||||
|
; PxW ]1;]2;]3;]4
|
||||||
|
macro _SetAbsClamp
|
||||||
|
{
|
||||||
|
Tool $2A03
|
||||||
|
}
|
||||||
|
;~GetAbsClamp MAC
|
||||||
|
; PHS 4
|
||||||
|
macro _GetAbsClamp
|
||||||
|
{
|
||||||
|
Tool $2B03
|
||||||
|
}
|
||||||
|
macro _SysBeep
|
||||||
|
{
|
||||||
|
Tool $2C03
|
||||||
|
}
|
||||||
|
;~AddToQueue MAC
|
||||||
|
; PxL ]1;]2
|
||||||
|
macro _AddToQueue
|
||||||
|
{
|
||||||
|
Tool $2E03
|
||||||
|
}
|
||||||
|
;~DeleteFromQueue MAC
|
||||||
|
; PxL ]1;]2
|
||||||
|
macro _DeleteFromQueue
|
||||||
|
{
|
||||||
|
Tool $2F03
|
||||||
|
}
|
||||||
|
;~SetInterruptState MAC
|
||||||
|
; PHLW ]1;]2
|
||||||
|
macro _SetInterruptState
|
||||||
|
{
|
||||||
|
Tool $3003
|
||||||
|
}
|
||||||
|
;~GetInterruptState MAC
|
||||||
|
; PHLW ]1;]2
|
||||||
|
macro _GetInterruptState
|
||||||
|
{
|
||||||
|
Tool $3103
|
||||||
|
}
|
||||||
|
;~GetIntStateRecSize MAC
|
||||||
|
; PHA
|
||||||
|
macro _GetIntStateRecSize
|
||||||
|
{
|
||||||
|
Tool $3203
|
||||||
|
}
|
||||||
|
;~ReadMouse2 MAC
|
||||||
|
; PHS 3
|
||||||
|
macro _ReadMouse2
|
||||||
|
{
|
||||||
|
Tool $3303
|
||||||
|
}
|
||||||
|
;~GetCodeResConverter MAC
|
||||||
|
; PHS 2
|
||||||
|
macro _GetCodeResConverter
|
||||||
|
{
|
||||||
|
Tool $3403
|
||||||
|
}
|
||||||
|
macro _GetROMResource
|
||||||
|
{
|
||||||
|
Tool $3503
|
||||||
|
}
|
||||||
|
macro _ReleaseROMResource
|
||||||
|
{
|
||||||
|
Tool $3603
|
||||||
|
}
|
||||||
|
macro _ConvSeconds
|
||||||
|
{
|
||||||
|
Tool $3703
|
||||||
|
}
|
||||||
|
macro _SysBeep2
|
||||||
|
{
|
||||||
|
Tool $3803
|
||||||
|
}
|
||||||
|
macro _VersionString
|
||||||
|
{
|
||||||
|
Tool $3903
|
||||||
|
}
|
||||||
|
macro _WaitUntil
|
||||||
|
{
|
||||||
|
Tool $3A03
|
||||||
|
}
|
||||||
|
macro _StringToText
|
||||||
|
{
|
||||||
|
Tool $3B03
|
||||||
|
}
|
||||||
|
macro _ShowBootInfo
|
||||||
|
{
|
||||||
|
Tool $3C03
|
||||||
|
}
|
||||||
|
macro _ScanDevices
|
||||||
|
{
|
||||||
|
Tool $3D03
|
||||||
|
}
|
||||||
|
macro _AlertMessage
|
||||||
|
{
|
||||||
|
Tool $3E03
|
||||||
|
}
|
||||||
|
macro _DoSysPrefs
|
||||||
|
{
|
||||||
|
Tool $3F03
|
||||||
|
}
|
||||||
|
|
788
samples/apple2gs/gsos/macros/Util.Macs.s
Normal file
788
samples/apple2gs/gsos/macros/Util.Macs.s
Normal file
@ -0,0 +1,788 @@
|
|||||||
|
*=================================================
|
||||||
|
* Utility Macros - from Merlin disk
|
||||||
|
* by Dave Klimas, et al
|
||||||
|
*
|
||||||
|
* Copyright Apple Computer, Inc. 1986, 1987
|
||||||
|
* and Roger Wagner Publishing, Inc. 1988
|
||||||
|
* All Rights Reserved
|
||||||
|
*-------------------------------------------------
|
||||||
|
if 0
|
||||||
|
;PHWL MAC
|
||||||
|
; PHW ]1
|
||||||
|
; PHL ]2
|
||||||
|
; <<<
|
||||||
|
;PHLW MAC
|
||||||
|
; PHL ]1
|
||||||
|
; PHW ]2
|
||||||
|
; <<<
|
||||||
|
;PxW MAC
|
||||||
|
; DO ]0/1
|
||||||
|
; PHW ]1
|
||||||
|
; DO ]0/2
|
||||||
|
; PHW ]2
|
||||||
|
; DO ]0/3
|
||||||
|
; PHW ]3
|
||||||
|
; DO ]0/4
|
||||||
|
; PHW ]4
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;PxL MAC
|
||||||
|
; DO ]0/1
|
||||||
|
; PHL ]1
|
||||||
|
; DO ]0/2
|
||||||
|
; PHL ]2
|
||||||
|
; DO ]0/3
|
||||||
|
; PHL ]3
|
||||||
|
; DO ]0/4
|
||||||
|
; PHL ]4
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;P2SL MAC
|
||||||
|
; PHA
|
||||||
|
;P1SL MAC
|
||||||
|
; PHA
|
||||||
|
;PHL MAC
|
||||||
|
; IF #=]1
|
||||||
|
; PEA ^]1
|
||||||
|
; ELSE
|
||||||
|
; PHW ]1+2
|
||||||
|
; FIN
|
||||||
|
; PHW ]1
|
||||||
|
; <<<
|
||||||
|
;P2SW MAC
|
||||||
|
; PHA
|
||||||
|
;P1SW MAC
|
||||||
|
; PHA
|
||||||
|
;PHW MAC
|
||||||
|
; IF #=]1
|
||||||
|
; PEA ]1
|
||||||
|
; ELSE
|
||||||
|
; IF MX/2
|
||||||
|
; LDA ]1+1
|
||||||
|
; PHA
|
||||||
|
; FIN
|
||||||
|
; LDA ]1
|
||||||
|
; PHA
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;PushSpace MAC
|
||||||
|
;PHS MAC
|
||||||
|
; DO ]0
|
||||||
|
; LUP ]1
|
||||||
|
; PHA
|
||||||
|
; --^
|
||||||
|
; ELSE
|
||||||
|
; PHA
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;********************************
|
||||||
|
;
|
||||||
|
;Push4 MAC
|
||||||
|
; PushLong #0
|
||||||
|
; PushLong #0
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;PushPtr MAC
|
||||||
|
; PEA ^]1
|
||||||
|
; PEA ]1
|
||||||
|
; EOM
|
||||||
|
endif
|
||||||
|
macro PushLong value
|
||||||
|
{
|
||||||
|
pea $value>>16
|
||||||
|
pea $value
|
||||||
|
}
|
||||||
|
|
||||||
|
macro PushWord value
|
||||||
|
{
|
||||||
|
lda value
|
||||||
|
pha
|
||||||
|
}
|
||||||
|
if 0
|
||||||
|
;PullLong MAC
|
||||||
|
; DO ]0
|
||||||
|
; PullWord ]1
|
||||||
|
; PullWord ]1+2
|
||||||
|
; ELSE
|
||||||
|
; PullWord
|
||||||
|
; PullWord
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;PullWord MAC
|
||||||
|
; PLA
|
||||||
|
; DO ]0
|
||||||
|
; STA ]1
|
||||||
|
; FIN
|
||||||
|
; IF MX/2
|
||||||
|
; PLA
|
||||||
|
; DO ]0
|
||||||
|
; STA ]1+1
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;MoveLong MAC
|
||||||
|
; MoveWord ]1;]2
|
||||||
|
; MoveWord ]1+2;]2+2
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;MoveWord MAC
|
||||||
|
; LDA ]1
|
||||||
|
; STA ]2
|
||||||
|
; IF MX/2
|
||||||
|
; LDA ]1+1
|
||||||
|
; STA ]2+1
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;MoveBlock MAC ;1st_byte;last_byte;dest
|
||||||
|
; DO ]2/]1
|
||||||
|
; DO ]3/]1
|
||||||
|
; LDX #]2
|
||||||
|
; LDY #]3+]2-]1
|
||||||
|
; LDA #]2-]1
|
||||||
|
; MVP ]1,]3
|
||||||
|
; ELSE
|
||||||
|
; LDX #]1
|
||||||
|
; LDY #]3
|
||||||
|
; LDA #]2-]1
|
||||||
|
; MVN ]1,]3
|
||||||
|
; FIN
|
||||||
|
; ELSE
|
||||||
|
; ERR 1 ;Last adrs < first adrs
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;CmpLong MAC
|
||||||
|
; LDA ]1
|
||||||
|
; CMP ]2
|
||||||
|
; IF #=]1
|
||||||
|
; LDA ^]1
|
||||||
|
; ELSE
|
||||||
|
; LDA ]1+2
|
||||||
|
; FIN
|
||||||
|
; IF #=]2
|
||||||
|
; SBC ^]2
|
||||||
|
; ELSE
|
||||||
|
; SBC ]2+2
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;LONGM MAC
|
||||||
|
;LONGACC MAC ;Assumes native mode
|
||||||
|
; IF MX&2 ;If A is now short
|
||||||
|
; REP %00100000
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;LONGX MAC
|
||||||
|
;LONGXY MAC ;Assumes native mode
|
||||||
|
; IF MX&1 ;If X is now short
|
||||||
|
; REP %00010000
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;LONG MAC
|
||||||
|
;LONGAX MAC ;Assumes native mode
|
||||||
|
; IF MX ;If not now in full 16
|
||||||
|
; REP %00110000
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;SHORTM MAC
|
||||||
|
;SHORTACC MAC ;Assumes native mode
|
||||||
|
; IF MX&2 ;If A is now short,
|
||||||
|
; ELSE ; ignore
|
||||||
|
; SEP %00100000
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;SHORTX MAC
|
||||||
|
;SHORTXY MAC ;Assumes native mode
|
||||||
|
; IF MX&1 ;If X is now short,
|
||||||
|
; ELSE ; ignore
|
||||||
|
; SEP %00010000
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;SHORT MAC
|
||||||
|
;SHORTAX MAC ;Assumes native mode
|
||||||
|
; IF MX!%11 ;If not now in full 8
|
||||||
|
; SEP %00110000
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;LONGI MAC ; Duplicates APW function
|
||||||
|
; LST OFF
|
||||||
|
; DO ]1 ; If arg = 1 = "on" = make long
|
||||||
|
;
|
||||||
|
; IF MX-3/-1 ; If M is short and X is long
|
||||||
|
;; Leave alone
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
; IF MX/3 ; If M is short and X is short
|
||||||
|
; MX %10 ; Make X long, leave M short
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
; IF MX!3/3 ; If M is long and X is long
|
||||||
|
; FIN ; Leave alone
|
||||||
|
;
|
||||||
|
; IF MX-2/-1 ; If M is long and X is short
|
||||||
|
; MX %00 ; Make X long, leave M long
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
; ELSE ; If arg = 0 = "off" = make short
|
||||||
|
;
|
||||||
|
; IF MX/3 ; If M is short and X is short
|
||||||
|
; ; Leave alone
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
; IF MX-3/-1 ; If M is short and X is long
|
||||||
|
; MX %11 ; Make X short, leave M short
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
; IF MX-2/-1 ; If M is long and X is short
|
||||||
|
; ; Leave alone
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; IF MX!3/3 ; If M is long and X is long
|
||||||
|
; MX %01 ; Make X short, leave M long
|
||||||
|
; FIN ; Leave alone
|
||||||
|
;
|
||||||
|
; FIN ; End of macro tests
|
||||||
|
;
|
||||||
|
; LST RTN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;LONGA MAC ; Duplicates APW function
|
||||||
|
; LST OFF
|
||||||
|
; DO ]1 ; If arg = 1 = "on" = make long
|
||||||
|
;
|
||||||
|
; IF MX-3/-1 ; If M is short and X is long
|
||||||
|
; MX %00 ; Make M long, leave X long
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
; IF MX/3 ; If M is short and X is short
|
||||||
|
; MX %01 ; Make M long, leave X short
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
; IF MX!3/3 ; If M is long and X is long
|
||||||
|
; FIN ; Leave alone
|
||||||
|
;
|
||||||
|
; IF MX-2/-1 ; If M is long and X is short
|
||||||
|
; ; Leave alone
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
; ELSE ; If arg = 0 = "off" = make short
|
||||||
|
;
|
||||||
|
; IF MX/3 ; If M is short and X is short
|
||||||
|
; ; Leave alone
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
; IF MX-3/-1 ; If M is short and X is long
|
||||||
|
; ; Leave alone
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
; IF MX-2/-1 ; If M is long and X is short
|
||||||
|
; MX %11 ; Make M short, leave X short
|
||||||
|
; FIN ; End of this test
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; IF MX!3/3 ; If M is long and X is long
|
||||||
|
; MX %10 ; Make M short, leave X long
|
||||||
|
; FIN ; Leave alone
|
||||||
|
;
|
||||||
|
; FIN ; End of macro tests
|
||||||
|
;
|
||||||
|
; LST RTN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;M65816 MAC
|
||||||
|
; DO ]1
|
||||||
|
; XC
|
||||||
|
; XC ; Full 65816 mode for assembler
|
||||||
|
; MX %00
|
||||||
|
; ELSE
|
||||||
|
; MX %11 ; 8 bit mode for assembler
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;Expmac MAC ; Replace APW GEN function
|
||||||
|
; DO ]1
|
||||||
|
; EXP ONLY ; Expand macros
|
||||||
|
; ELSE
|
||||||
|
; EXP OFF
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
endif
|
||||||
|
macro Tool _toolNum
|
||||||
|
{
|
||||||
|
LDX #_toolNum ; load tool call #
|
||||||
|
JSL $E10000 ; go to dispatcher
|
||||||
|
}
|
||||||
|
if 0
|
||||||
|
;**************************************************
|
||||||
|
;* Auto-menu item macros *
|
||||||
|
;* This is one alternative for defining a menu *
|
||||||
|
;* item. It has the advantage of letting you *
|
||||||
|
;* include specifiers for Bold, Italic, etc. *
|
||||||
|
;**************************************************
|
||||||
|
;
|
||||||
|
;*-------------------------------------------------
|
||||||
|
;* Syntax:
|
||||||
|
;* ]mnum = 0 ; initialize menu # at startvalue-1
|
||||||
|
;* Menu ' Menu 1 '
|
||||||
|
;*
|
||||||
|
;* (See Menu macro, defined later....)
|
||||||
|
;*
|
||||||
|
;* ]inum = 255 ; Menu item starts with #256
|
||||||
|
;* Item ' Choice 1 ';Kybd;'Bb';Check
|
||||||
|
;* Ch1 = ]inum ; Set label Ch1 if somewhere else
|
||||||
|
;* needs to use this item #.
|
||||||
|
;* Item ' Choice 2 ';Disable;'';Kybd;'Cc'
|
||||||
|
;* Item ' Choice 3 ';Divide;''
|
||||||
|
;*
|
||||||
|
;* Menu ' Menu 2 '
|
||||||
|
;*
|
||||||
|
;* Item ' Choice 4 ';Bold;'';Check
|
||||||
|
;* Item ' Choice 5 ';Italic;'';Blank
|
||||||
|
;* Item ' Choice 6 ';Underline';Kybd;'Dd'
|
||||||
|
;*
|
||||||
|
;* IMPORTANT: ALL items, except for Check and Blank, are followed by a second
|
||||||
|
;* value. For the Kybd item, the ASCII characters follow in single quotes, Ex:
|
||||||
|
;* Kybd;'Cc' (specifies Apple-C as an equivalent).
|
||||||
|
;* All other items use a null 2nd value, as in:
|
||||||
|
;* Italic;'' or Divide;'' etc.
|
||||||
|
;*
|
||||||
|
;* The variable ]inum MUST be initialized for the value of your first
|
||||||
|
;* menu item MINUS 1 before using the first Item macro.
|
||||||
|
;*
|
||||||
|
;* Check or Blank, if used, MUST be the last item in the macro line.
|
||||||
|
;*
|
||||||
|
;* There can be up to three parameter pairs after the item name.
|
||||||
|
;*-------------------------------------------------
|
||||||
|
;* The point of all this is that rather than hard-
|
||||||
|
;* code menu items values and subsequent references
|
||||||
|
;* to that number when disabling menus, etc., this
|
||||||
|
;* lets you add and delete menu items at will,
|
||||||
|
;* and have labels like Ch1, etc. above, auto-
|
||||||
|
;* matically set for the correct value during the
|
||||||
|
;* assembly.
|
||||||
|
;*-------------------------------------------------
|
||||||
|
;
|
||||||
|
;* Equates for Item macro:
|
||||||
|
;
|
||||||
|
;Bold = 'B' ; bold menu item
|
||||||
|
;Disable = 'D' ; disabled menu item
|
||||||
|
;Italic = 'I' ; italic menu item
|
||||||
|
;Underline = 'U' ; underlined menu item
|
||||||
|
;Divide = 'V' ; menu dividing line
|
||||||
|
;ColorHi = 'X' ; color hilite menu item
|
||||||
|
;Kybd = '*' ; keyboard menu equivalent
|
||||||
|
;Check = $1243 ; menu item with checkmark
|
||||||
|
;Blank = $2043 ; menu item with blank
|
||||||
|
;
|
||||||
|
;*-------------------------------------------------
|
||||||
|
;
|
||||||
|
;Item MAC ; Macro for creating a menu item
|
||||||
|
;
|
||||||
|
; ASC '--'
|
||||||
|
; ASC ]1 ; Text of menu item
|
||||||
|
; ASC '\H'
|
||||||
|
; DA ]inum ; Menu item #
|
||||||
|
;
|
||||||
|
; DO ]0/2 ; Only if more items to do... (>2)
|
||||||
|
;
|
||||||
|
; DO ]2-Check-1/-1 ; Only if Check item
|
||||||
|
; DA ]2 ; ]2 = Check
|
||||||
|
; ELSE ; otherwise kybd char or null
|
||||||
|
; DO ]2-Blank-1/-1 ; Only if Blank check item
|
||||||
|
; DA ]2 ; ]2 = Blank
|
||||||
|
; ELSE
|
||||||
|
; DB ]2 ; Function char value
|
||||||
|
; ASC ]3 ; ASCII argument, if any for Kybd
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
;
|
||||||
|
; FIN
|
||||||
|
;
|
||||||
|
; DO ]0/4 ; Only if more items to do... (>3)
|
||||||
|
;
|
||||||
|
; DO ]4-Check-1/-1 ; Only if Check item
|
||||||
|
; DA ]4 ; ]4 = Check
|
||||||
|
; ELSE ; otherwise kybd char or null
|
||||||
|
; DO ]4-Blank-1/-1 ; Only if Blank check item
|
||||||
|
; DA ]4 ; ]4 = Blank
|
||||||
|
; ELSE
|
||||||
|
; DB ]4 ; Function char value
|
||||||
|
; ASC ]5 ; ASCII argument, if any for Kybd
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
;
|
||||||
|
; FIN
|
||||||
|
;
|
||||||
|
; DO ]0/6 ; Only if more items to do... (>5)
|
||||||
|
;
|
||||||
|
; DO ]6-Check-1/-1 ; Only if Check item
|
||||||
|
; DA ]6 ; ]6 = Check
|
||||||
|
; ELSE ; otherwise kybd char or null
|
||||||
|
; DO ]6-Blank-1/-1 ; Only if Blank check item
|
||||||
|
; DA ]6 ; ]6 = Blank
|
||||||
|
; ELSE
|
||||||
|
; DB ]6 ; Function char value
|
||||||
|
; ASC ]7 ; ASCII argument, if any for Kybd
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
;
|
||||||
|
; FIN
|
||||||
|
;
|
||||||
|
; DB $00 ; End of menu item
|
||||||
|
;
|
||||||
|
;]inum = ]inum+1
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;**************************************************
|
||||||
|
;* This is another alternative macro for both *
|
||||||
|
;* menus and menu items. It is simpler, and *
|
||||||
|
;* more compact, but not as versatile. *
|
||||||
|
;**************************************************
|
||||||
|
;
|
||||||
|
;*===============================================
|
||||||
|
;* Variables ]mnum,]inum should be defined
|
||||||
|
;* prior to using these MenuMaker macros.
|
||||||
|
;*
|
||||||
|
;* They both should be starting value-1
|
||||||
|
;*
|
||||||
|
;* Syntax:
|
||||||
|
;*
|
||||||
|
;* ]mnum = 0 ; 1st menu number will be 1
|
||||||
|
;* ]inum = 255 ; 1st menu item number will be 256
|
||||||
|
;*
|
||||||
|
;* Menu ' @';X ; Apple menu, color highlighting.
|
||||||
|
;*
|
||||||
|
;* MItem ' About... ' ; "About" menu item
|
||||||
|
;*
|
||||||
|
;* Menu ' Menu Title 1' ; (this will be menu number 2)
|
||||||
|
;*
|
||||||
|
;* MItem ' Choice 1 '
|
||||||
|
;* MItem ' Choice 2 ';'D*Cc' ; Disabled, kybd char: Cc
|
||||||
|
;* ; Above will be menu item #'s 2&3
|
||||||
|
;*
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;Menu MAC
|
||||||
|
; ASC '>>'
|
||||||
|
; ASC ]1
|
||||||
|
; ASC '\H'
|
||||||
|
; DA ]mnum
|
||||||
|
; DO ]0>1
|
||||||
|
; ASC ]2
|
||||||
|
; FIN
|
||||||
|
; DB 0
|
||||||
|
;]mnum = ]mnum+1
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;MItem MAC
|
||||||
|
; ASC '--'
|
||||||
|
; ASC ]1
|
||||||
|
; ASC '\H'
|
||||||
|
; DA ]inum
|
||||||
|
; DO ]0>1
|
||||||
|
; ASC ]2
|
||||||
|
; FIN
|
||||||
|
; DB 0
|
||||||
|
;]inum = ]inum+1
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;*-----------------------------------------------------
|
||||||
|
;*
|
||||||
|
;* Native -- Processor is in LONG "native" mode.
|
||||||
|
;* Native Long -- Processor is in LONG "native" mode.
|
||||||
|
;* Native Short -- Processor is in SHORT "native" mode.
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;Native MAC
|
||||||
|
; CLC
|
||||||
|
; XCE
|
||||||
|
; IF 0=]0 ;If Native (Long)
|
||||||
|
; LONGAX
|
||||||
|
; FIN
|
||||||
|
;
|
||||||
|
; DO ]0
|
||||||
|
; IF L=]1 ;If Native Long
|
||||||
|
; LONGAX
|
||||||
|
;
|
||||||
|
; FIN ;If Native Short only
|
||||||
|
; FIN ; do CLC, XCE.
|
||||||
|
; EOM
|
||||||
|
;
|
||||||
|
;*--------------------------------------------------------
|
||||||
|
;*
|
||||||
|
;* Emulation -- Set Processor into "emulation" mode.
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;Emulation MAC
|
||||||
|
; SEC
|
||||||
|
; XCE
|
||||||
|
; EOM
|
||||||
|
;
|
||||||
|
;*-----------------------------------------------------
|
||||||
|
;*
|
||||||
|
;* WriteCh -- Print Character From Accumulator
|
||||||
|
;* WriteCh ADDR -- Print Character At Label
|
||||||
|
;* WriteCh ADDR,X -- Print Character At Label,X
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;WriteCh MAC
|
||||||
|
; DO ]0
|
||||||
|
; LDA ]1
|
||||||
|
; FIN
|
||||||
|
; PHA
|
||||||
|
; LDX #$180C
|
||||||
|
; JSL $E10000
|
||||||
|
; EOM
|
||||||
|
;
|
||||||
|
;*-----------------------------------------------------
|
||||||
|
;*
|
||||||
|
;* ReadCh -- Get Keypress in Accumulator
|
||||||
|
;* ReadCh ADDR -- Get Keypress in Label
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;ReadCh MAC
|
||||||
|
; PEA 0
|
||||||
|
; PEA 1
|
||||||
|
; LDX #$220C
|
||||||
|
; JSL $E10000
|
||||||
|
; PLA
|
||||||
|
; DO ]0
|
||||||
|
; STA ]1
|
||||||
|
; FIN
|
||||||
|
; EOM
|
||||||
|
;
|
||||||
|
;*-----------------------------------------------------
|
||||||
|
;*
|
||||||
|
;* WriteLn "STRING" -- Print Literal String with CR.
|
||||||
|
;* WriteLn ADDR -- Print String At Address with CR.
|
||||||
|
;* WriteLn -- Print CR.
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;WriteLn MAC
|
||||||
|
; DO ]0
|
||||||
|
; WriteStr ]1
|
||||||
|
; FIN
|
||||||
|
; WriteCh #$8D
|
||||||
|
; EOM
|
||||||
|
;
|
||||||
|
;*-----------------------------------------------------
|
||||||
|
;*
|
||||||
|
;* WriteStr "STRING" -- Print Literal String.
|
||||||
|
;* WriteStr ADDR -- Print String At Address.
|
||||||
|
;* WriteStr -- Print String At A (Lo),Y (Hi).
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;WriteStr MAC
|
||||||
|
; IF 0=]0 ;If No Label
|
||||||
|
; PHY
|
||||||
|
; PHA
|
||||||
|
;
|
||||||
|
; ELSE
|
||||||
|
;
|
||||||
|
; IF "=]1
|
||||||
|
; PEA ^]String
|
||||||
|
; PEA ]String
|
||||||
|
; BRL ]Skip
|
||||||
|
;]String STR ]1
|
||||||
|
;]Skip
|
||||||
|
; ELSE
|
||||||
|
;
|
||||||
|
; IF '=]1
|
||||||
|
; PEA ^]String
|
||||||
|
; PEA ]String
|
||||||
|
; BRL ]Skip
|
||||||
|
;]String STR ]1
|
||||||
|
;]Skip
|
||||||
|
; ELSE
|
||||||
|
;
|
||||||
|
; PEA ^]1
|
||||||
|
; PEA ]1
|
||||||
|
;
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
; LDX #$1C0C
|
||||||
|
; JSL $E10000
|
||||||
|
; EOM
|
||||||
|
;
|
||||||
|
;*-----------------------------------------------------
|
||||||
|
;*
|
||||||
|
;* DrawStrHV 8;12;"STRING" Print Literal String on
|
||||||
|
;* DrawStr 8;12;ADDR Super Hi-Res Screen.
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;DrawStrHV MAC
|
||||||
|
; HtabVtab ]1;]2
|
||||||
|
; DrawStr ]3
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;*-----------------------------------------------------
|
||||||
|
;*
|
||||||
|
;* DrawStr "STRING" -- Print Literal String.
|
||||||
|
;* DrawStr ADDR -- Print String At Address.
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;DrawStr MAC
|
||||||
|
; IF "=]1
|
||||||
|
; PEA ^]String
|
||||||
|
; PEA ]String
|
||||||
|
; BRL ]Skip
|
||||||
|
;]String STR ]1
|
||||||
|
;]Skip
|
||||||
|
; ELSE
|
||||||
|
; IF '=]1
|
||||||
|
; PEA ^]String
|
||||||
|
; PEA ]String
|
||||||
|
; BRL ]Skip
|
||||||
|
;]String STR ]1
|
||||||
|
;]Skip
|
||||||
|
; ELSE
|
||||||
|
; PEA ^]1
|
||||||
|
; PEA ]1
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
; LDX #$A504 ;DrawString
|
||||||
|
; JSL $E10000
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;*-----------------------------------------------------
|
||||||
|
;*
|
||||||
|
;* HtabVtab #8;#12 -- Position at Htab 8, Vtab 12.
|
||||||
|
;* HtabVtab H;V on super hires screens.
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;HtabVtab MAC
|
||||||
|
; IF #=]1
|
||||||
|
; LDA ]1*8
|
||||||
|
; ELSE
|
||||||
|
; LDA ]1
|
||||||
|
; ASL
|
||||||
|
; ASL
|
||||||
|
; ASL
|
||||||
|
; FIN
|
||||||
|
; PHA
|
||||||
|
; IF #=]1
|
||||||
|
; LDA ]2*8
|
||||||
|
; ELSE
|
||||||
|
; LDA ]2
|
||||||
|
; ASL
|
||||||
|
; ASL
|
||||||
|
; ASL
|
||||||
|
; FIN
|
||||||
|
; PHA
|
||||||
|
; LDX #$3A04 ;MoveTo
|
||||||
|
; JSL $E10000
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;*-----------------------------------------------------
|
||||||
|
;*
|
||||||
|
;* Deref MyHandle;MyPtr -- Uses zero page 0-3 to
|
||||||
|
;* de-reference a handle.
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;Deref MAC
|
||||||
|
; LDA ]1
|
||||||
|
; LDX ]1+2
|
||||||
|
; STA 0
|
||||||
|
; STX 2
|
||||||
|
; LDA [0]
|
||||||
|
; STA ]2
|
||||||
|
; LDY #2
|
||||||
|
; LDA [0],Y
|
||||||
|
; STA ]2+2
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;*==================================================
|
||||||
|
;* The MLI16 macro assumes the CALLDOS file from the
|
||||||
|
;* SUBROUT.LIB is linked in. It provides an easy
|
||||||
|
;* way to make MLI calls. Example syntax:
|
||||||
|
;*
|
||||||
|
;* MLI16 close;CLSPARMS
|
||||||
|
;*--------------------------------------------------
|
||||||
|
;
|
||||||
|
;MLI16 MAC ;Uses CALLDOS file in the
|
||||||
|
; IF MX ; subroutine library
|
||||||
|
; REP %00110000 ;Force full 16-bit mode, if
|
||||||
|
; FIN ; not already there.
|
||||||
|
; LDX #]1 ;Call code (use MLI.CODES)
|
||||||
|
; LDA #]2 ;Low word of PARMS tbl adr
|
||||||
|
; JSR CALLDOS ;Returns CS if an error
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;*=================================================
|
||||||
|
;* The following macros are APW-equivalents for
|
||||||
|
;* compatibility with APW style listings.
|
||||||
|
;*
|
||||||
|
;* One difference between Merlin and APW here: Instead of
|
||||||
|
;* using the syntax PULL1 ADDRESS;X, Merlin can take
|
||||||
|
;* the raw statement PULL1 ADDRESS,X.
|
||||||
|
;*
|
||||||
|
;
|
||||||
|
;PULL1 MAC
|
||||||
|
; SEP #%00100000
|
||||||
|
; PLA
|
||||||
|
; REP #%00100000
|
||||||
|
; DO ]0/1 ;If 1 parm
|
||||||
|
; IF MX>0
|
||||||
|
; STA ]1
|
||||||
|
; FIN
|
||||||
|
; IF MX=0
|
||||||
|
; STAL ]1
|
||||||
|
; FIN
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;PULL3 MAC
|
||||||
|
; SEP #%00100000
|
||||||
|
; PLA
|
||||||
|
; STA ]1
|
||||||
|
; REP #%00100000
|
||||||
|
; PLA
|
||||||
|
; STA ]1+1
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;PUSH1 MAC
|
||||||
|
; SEP #%00100000
|
||||||
|
; IF ]0/1 ;if one parm
|
||||||
|
; LDA ]1
|
||||||
|
; FIN
|
||||||
|
; PHA
|
||||||
|
; REP #%00100000
|
||||||
|
; <<<
|
||||||
|
;
|
||||||
|
;PUSH3 MAC
|
||||||
|
; IF #=]1
|
||||||
|
; LDA #^]1 ;get two hi order bytes
|
||||||
|
; PHA
|
||||||
|
; PHB
|
||||||
|
; LDA #<]1
|
||||||
|
; STA 1,S
|
||||||
|
; ELSE
|
||||||
|
; LDA ]1+1
|
||||||
|
; PHA
|
||||||
|
; PHB
|
||||||
|
; LDA ]1
|
||||||
|
; STA 1,S
|
||||||
|
; FIN
|
||||||
|
; <<<
|
||||||
|
endif
|
||||||
|
|
48
samples/apple2gs/gsos/macros/common.i
Normal file
48
samples/apple2gs/gsos/macros/common.i
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
;
|
||||||
|
; common.i
|
||||||
|
;
|
||||||
|
|
||||||
|
; merlin mx macro
|
||||||
|
macro mx mx
|
||||||
|
{
|
||||||
|
if (0 == (mx&%10))
|
||||||
|
A16
|
||||||
|
else
|
||||||
|
A8
|
||||||
|
endif
|
||||||
|
if (0 == (mx&%01))
|
||||||
|
I16
|
||||||
|
else
|
||||||
|
I8
|
||||||
|
endif
|
||||||
|
}
|
||||||
|
|
||||||
|
macro _shadowON
|
||||||
|
{
|
||||||
|
lda >$00C035
|
||||||
|
and #$FFF7
|
||||||
|
sta >$00C035
|
||||||
|
}
|
||||||
|
|
||||||
|
macro _shadowOFF
|
||||||
|
{
|
||||||
|
lda >$00C035
|
||||||
|
ora #$0008
|
||||||
|
sta >$00C035
|
||||||
|
}
|
||||||
|
|
||||||
|
macro _auxON
|
||||||
|
{
|
||||||
|
lda >$00C068
|
||||||
|
ora #$0030
|
||||||
|
sta >$00C068
|
||||||
|
}
|
||||||
|
|
||||||
|
macro _auxOFF
|
||||||
|
{
|
||||||
|
lda >$00C068
|
||||||
|
and #$FFCF
|
||||||
|
sta >$00C068
|
||||||
|
}
|
||||||
|
|
||||||
|
|
11
samples/apple2gs/gsos/macros/dp.s
Normal file
11
samples/apple2gs/gsos/macros/dp.s
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
*
|
||||||
|
* Common Direct Page Equates
|
||||||
|
*
|
||||||
|
|
||||||
|
struct dp {
|
||||||
|
word source
|
||||||
|
word sourceHi
|
||||||
|
word dest
|
||||||
|
word destHi
|
||||||
|
}
|
||||||
|
|
6
x65.cpp
6
x65.cpp
@ -504,7 +504,7 @@ enum AddrMode {
|
|||||||
AM8_JML = AMM_REL_L | AMM_ABS_L,
|
AM8_JML = AMM_REL_L | AMM_ABS_L,
|
||||||
AM8_BRL = AMM_BRANCH_L | AMM_ABS,
|
AM8_BRL = AMM_BRANCH_L | AMM_ABS,
|
||||||
AM8_MVN = AMM_BLK_MOV,
|
AM8_MVN = AMM_BLK_MOV,
|
||||||
AM8_PEI = AMM_ZP_REL,
|
AM8_PEI = AMM_ZP_REL | AMM_ZP,
|
||||||
AM8_PER = AMM_BRANCH_L | AMM_ABS,
|
AM8_PER = AMM_BRANCH_L | AMM_ABS,
|
||||||
AM8_REP = AMM_IMM | AMM_ZP, // Merlin allows this to look like a zp access
|
AM8_REP = AMM_IMM | AMM_ZP, // Merlin allows this to look like a zp access
|
||||||
};
|
};
|
||||||
@ -808,7 +808,7 @@ struct mnem opcodes_65816[] = {
|
|||||||
{ "mvp", AM8_MVN, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44 } },
|
{ "mvp", AM8_MVN, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44 } },
|
||||||
{ "mvn", AM8_MVN, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54 } },
|
{ "mvn", AM8_MVN, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54 } },
|
||||||
{ "pea", AMM_ABS, { 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
{ "pea", AMM_ABS, { 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||||
{ "pei", AMM_ZP, { 0x00, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
{ "pei", AM8_PEI, { 0x00, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||||
{ "per", AM8_PER, { 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
{ "per", AM8_PER, { 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||||
{ "rep", AM8_REP, { 0x00, 0xc2, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
{ "rep", AM8_REP, { 0x00, 0xc2, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||||
{ "sep", AM8_REP, { 0x00, 0xe2, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
{ "sep", AM8_REP, { 0x00, 0xe2, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||||
@ -7757,7 +7757,7 @@ StatusCode Asm::WriteA2GS_OMF(strref filename, bool full_collapse) {
|
|||||||
// insert all SUPER_RELOC2 / SUPER_RELOC3
|
// insert all SUPER_RELOC2 / SUPER_RELOC3
|
||||||
for (int b = 0; b <= 1; b++) {
|
for (int b = 0; b <= 1; b++) {
|
||||||
int count_offs = -1;
|
int count_offs = -1;
|
||||||
int prev_page = 0;
|
int prev_page = -1;
|
||||||
int inst_curr = instruction_offs;
|
int inst_curr = instruction_offs;
|
||||||
instructions[inst_curr++] = OMFR_SUPER;
|
instructions[inst_curr++] = OMFR_SUPER;
|
||||||
int len_offs = inst_curr;
|
int len_offs = inst_curr;
|
||||||
|
Loading…
Reference in New Issue
Block a user