mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-21 23:30:21 +00:00
656 lines
9.8 KiB
ArmAsm
656 lines
9.8 KiB
ArmAsm
*
|
||
* Le retour du Dr Genius
|
||
*
|
||
* (c) 1983, Loriciels
|
||
* (c) 2023, Brutal Deluxe Software (Apple II)
|
||
*
|
||
|
||
lst off
|
||
rel
|
||
dsk iigs.l
|
||
|
||
mx %00
|
||
xc
|
||
xc
|
||
|
||
*-----------------------------------
|
||
* MACROS
|
||
*-----------------------------------
|
||
|
||
use 4/Event.Macs
|
||
use 4/Locator.Macs
|
||
use 4/Mem.Macs
|
||
use 4/Menu.Macs
|
||
use 4/MidiSyn.Macs
|
||
use 4/Misc.Macs
|
||
use 4/QD.Macs
|
||
use 4/QDAux.Macs
|
||
use 4/Sound.Macs
|
||
use 4/Std.Macs
|
||
use 4/Util.Macs
|
||
use 4/Window.Macs
|
||
|
||
*-----------------------
|
||
|
||
KBD = $e0c000
|
||
KBDSTROBE = $e0c010
|
||
RDVBLBAR = $e0c019
|
||
VERTCNT = $e0c02e
|
||
GSOS = $e100a8
|
||
|
||
*-----------------------
|
||
|
||
dpFROM = $80
|
||
dpTO = dpFROM+4
|
||
dpTHREE = dpTO+4
|
||
|
||
*-----------------------
|
||
|
||
refIsPointer = $0
|
||
refIsHandle = $1
|
||
refIsResource = $2
|
||
|
||
appleKey = $0100
|
||
mouseDownEvt = $0001
|
||
mouseUpEvt = $0002
|
||
keyDownEvt = $0003
|
||
|
||
*-----------------------
|
||
|
||
modeCopy = $0000
|
||
modeForeCopy = $0004 ; QDII Table 16-10
|
||
|
||
mode320 = $00
|
||
mode640 = $80
|
||
|
||
maxX = 320
|
||
maxY = 200
|
||
|
||
maxTCOLUMN = 40
|
||
maxTROW = 19
|
||
|
||
charHEIGHT = 10
|
||
charWIDTH = 8
|
||
|
||
row0 = charHEIGHT-1 ; 0
|
||
row1 = row0+charHEIGHT ; 1
|
||
row2 = row1+charHEIGHT ; 2
|
||
row3 = row2+charHEIGHT ; 3
|
||
row4 = row3+charHEIGHT ; 4
|
||
row5 = row4+charHEIGHT ; 5
|
||
row6 = row5+charHEIGHT ; 6
|
||
row7 = row6+charHEIGHT ; 7
|
||
row8 = row7+charHEIGHT ; 8
|
||
row9 = row8+charHEIGHT ; 9
|
||
row10 = row9+charHEIGHT ; 10
|
||
row11 = row10+charHEIGHT ; 11
|
||
row12 = row11+charHEIGHT ; 12
|
||
row13 = row12+charHEIGHT ; 13
|
||
row14 = row13+charHEIGHT ; 14
|
||
row15 = row14+charHEIGHT ; 15
|
||
row16 = row15+charHEIGHT ; 16
|
||
row17 = row16+charHEIGHT ; 17
|
||
row18 = row17+charHEIGHT ; 18
|
||
row19 = row18+charHEIGHT ; 19
|
||
|
||
ptr012000 = $012000
|
||
ptrE12000 = $e12000
|
||
|
||
*-----------------------
|
||
|
||
TRUE = 1
|
||
FALSE = 0
|
||
|
||
*-----------------------------------
|
||
* DU 16-BITS
|
||
*-----------------------------------
|
||
|
||
ICI phk
|
||
plb
|
||
|
||
clc
|
||
xce
|
||
rep #$30
|
||
|
||
tdc
|
||
sta myDP
|
||
|
||
_TLStartUp
|
||
pha
|
||
_MMStartUp
|
||
pla
|
||
sta appID
|
||
ora #$0100
|
||
sta myID
|
||
|
||
*-----------------------------------
|
||
* MEMORY...
|
||
*-----------------------------------
|
||
|
||
jsr make64KB
|
||
bcc okMEM1
|
||
|
||
koMEM pha
|
||
PushLong #memSTR1
|
||
PushLong #errSTR2
|
||
PushLong #errSTR1
|
||
PushLong #errSTR2
|
||
_TLTextMountVolume
|
||
pla
|
||
brl meQUIT1
|
||
|
||
okMEM1 sty ptrTEXT
|
||
stx ptrTEXT+2
|
||
stx ptrBACKGND+2
|
||
|
||
*-----------------------
|
||
|
||
jsr make64KB
|
||
bcs koMEM
|
||
|
||
sty ptrUNPACK
|
||
stx ptrUNPACK+2
|
||
stx ptrIMAGE+2
|
||
|
||
*-----------------------------------
|
||
* DESKTOP MODE
|
||
*-----------------------------------
|
||
|
||
pha
|
||
pha
|
||
PushWord myID
|
||
PushWord #refIsPointer
|
||
PushLong #toolTBL
|
||
_StartUpTools
|
||
PullLong ssREC
|
||
bcc okTOOL
|
||
|
||
pha
|
||
PushLong #tolSTR1
|
||
PushLong #errSTR2
|
||
PushLong #errSTR1
|
||
PushLong #errSTR2
|
||
_TLTextMountVolume
|
||
pla
|
||
brl meQUIT
|
||
|
||
okTOOL _HideMenuBar
|
||
_InitCursor
|
||
_HideCursor
|
||
|
||
PushWord #0
|
||
PushWord #%11111111_11111111
|
||
PushWord #0
|
||
_FlushEvents
|
||
pla
|
||
|
||
PushLong #0
|
||
PushWord #5 ; SetDeskPat
|
||
PushWord #$4000
|
||
PushWord #$0000
|
||
_Desktop
|
||
pla
|
||
pla
|
||
|
||
*-----------------------------------
|
||
* INITIALISATIONS DESKTOP
|
||
*-----------------------------------
|
||
|
||
PushLong #0
|
||
_GetPort
|
||
PullLong mainPORT
|
||
|
||
PushLong mainPORT
|
||
_SetPort
|
||
|
||
PushLong #117117
|
||
_SetRandSeed
|
||
|
||
PushWord #0
|
||
_SetBackColor
|
||
PushWord #15
|
||
_SetForeColor
|
||
|
||
PushLong #whitePATTERN ; white pattern
|
||
_SetPenPat
|
||
|
||
PushWord #0
|
||
_ClearScreen
|
||
|
||
PushWord #0
|
||
_GetMasterSCB
|
||
pla
|
||
bmi okSHADOW ; shadowing is on if bit 15 is set
|
||
|
||
lda #^ptrE12000 ; shadowing is off, use slow RAM
|
||
sta srcLocInfoPtr+4
|
||
sta ptrSCREEN+2
|
||
|
||
okSHADOW
|
||
jsr initMIDI
|
||
jsr doSOUNDON
|
||
|
||
*-----------------------------------
|
||
* IL FAUT JOUER MAINTENANT
|
||
*-----------------------------------
|
||
|
||
jmp PLAY
|
||
|
||
*-----------------------------------
|
||
* AU REVOIR LE IIGS
|
||
*-----------------------------------
|
||
|
||
QUIT rep #$30
|
||
jsr stopMIDI
|
||
|
||
meQUIT PushWord #refIsPointer
|
||
PushLong ssREC
|
||
_ShutDownTools
|
||
|
||
meQUIT1 PushWord myID
|
||
_DisposeAll
|
||
|
||
PushWord appID
|
||
_DisposeAll
|
||
|
||
PushWord appID
|
||
_MMShutDown
|
||
|
||
_TLShutDown
|
||
|
||
jsl GSOS
|
||
dw $2029
|
||
adrl proQUIT
|
||
|
||
brk $bd
|
||
|
||
*-----------------------------------
|
||
* UNE BELLE BIBLIOTHEQUE
|
||
*-----------------------------------
|
||
|
||
*-----------------------------------
|
||
* RESERVE 64K
|
||
*-----------------------------------
|
||
|
||
make64KB pha
|
||
pha
|
||
PushLong #$010000
|
||
PushWord myID
|
||
PushWord #%11000000_00011100
|
||
PushLong #0
|
||
_NewHandle
|
||
phd
|
||
tsc
|
||
tcd
|
||
ldy #2
|
||
lda [3],y
|
||
tax
|
||
lda [3]
|
||
tay ; low in X
|
||
pld
|
||
pla ; we do not keep track of the handle
|
||
pla
|
||
rts
|
||
|
||
*-----------------------------------
|
||
* SAVE THE SHR SCREEN
|
||
*-----------------------------------
|
||
|
||
saveBACK _HideCursor
|
||
PushLong #ptrE12000
|
||
PushLong ptrBACKGND
|
||
PushLong #32768
|
||
_BlockMove
|
||
_ShowCursor
|
||
rts
|
||
|
||
*-----------------------------------
|
||
* RESTORE THE SHR SCREEN
|
||
*-----------------------------------
|
||
|
||
loadBACK _HideCursor
|
||
PushLong ptrBACKGND
|
||
PushLong #ptrE12000
|
||
PushLong #32768
|
||
_BlockMove
|
||
_ShowCursor
|
||
rts
|
||
|
||
*-----------------------------------
|
||
* LOAD/SAVE
|
||
*-----------------------------------
|
||
|
||
*----------------------------------- Open
|
||
|
||
doLOAD rep #$30
|
||
jsr doSOUNDOFF
|
||
rep #$30
|
||
jsr saveBACK
|
||
|
||
PushWord #30
|
||
PushWord #43
|
||
PushLong #strLOADFILE
|
||
PushLong #0
|
||
PushLong #typeLIST
|
||
PushLong #replyPTR
|
||
_SFGetFile
|
||
|
||
jsr loadBACK
|
||
jsr doSOUNDON
|
||
rep #$30
|
||
|
||
lda replyPTR
|
||
bne doLOAD1
|
||
rts
|
||
|
||
doLOAD1 jsr copyPATH
|
||
jsr loadALL
|
||
sep #$30
|
||
rts
|
||
|
||
mx %
|
||
|
||
*----------------------------------- Save
|
||
|
||
doSAVE rep #$30
|
||
jsr doSOUNDOFF
|
||
rep #$30
|
||
jsr saveBACK
|
||
|
||
PushWord #25
|
||
PushWord #36
|
||
PushLong #strSAVEFILE
|
||
PushLong #namePATH
|
||
PushWord #15
|
||
PushLong #replyPTR
|
||
_SFPutFile
|
||
|
||
jsr loadBACK
|
||
jsr doSOUNDON
|
||
rep #$30
|
||
|
||
lda replyPTR
|
||
bne doSAVE1
|
||
rts
|
||
|
||
doSAVE1 jsr copyPATH
|
||
jsr saveALL
|
||
sep #$30
|
||
rts
|
||
|
||
*--- Recopie le filename du fichier de sauvegarde
|
||
|
||
mx %00
|
||
|
||
copyPATH sep #$20
|
||
ldx #16-1
|
||
]lp lda namePATH1,x
|
||
sta pGAME+4,x
|
||
dex
|
||
bpl ]lp
|
||
|
||
lda namePATH
|
||
inc
|
||
inc
|
||
sta pGAME
|
||
rep #$20
|
||
rts
|
||
|
||
*--- Charge le fichier de sauvegarde en m<EFBFBD>moire
|
||
|
||
loadALL jsl GSOS
|
||
dw $2010
|
||
adrl proOPENGAME
|
||
bcs loadKO99
|
||
|
||
lda proOPENGAME+2
|
||
sta proREADGAME+2
|
||
sta proCLOSE+2
|
||
|
||
jsr loadPART
|
||
|
||
jsl GSOS
|
||
dw $2014
|
||
adrl proCLOSE
|
||
|
||
loadKO99 rts
|
||
|
||
*---
|
||
|
||
loadPART ldx #FIN_DATA-DEBUT_DATA
|
||
ldy #A1
|
||
|
||
loadIT stx proREADGAME+8
|
||
sty proREADGAME+4
|
||
jsl GSOS
|
||
dw $2012
|
||
adrl proREADGAME
|
||
rts
|
||
|
||
*--- Enregistre le fichier de sauvegarde
|
||
|
||
saveALL jsl GSOS
|
||
dw $2002
|
||
adrl proDESTROYGAME
|
||
|
||
jsl GSOS
|
||
dw $2001
|
||
adrl proCREATEGAME
|
||
bcs saveKO99
|
||
|
||
jsl GSOS
|
||
dw $2010
|
||
adrl proOPENGAME
|
||
bcs saveKO99
|
||
|
||
lda proOPENGAME+2
|
||
sta proWRITEGAME+2
|
||
sta proCLOSE+2
|
||
|
||
jsr savePART
|
||
|
||
jsl GSOS
|
||
dw $2014
|
||
adrl proCLOSE
|
||
|
||
saveKO99 rts
|
||
|
||
*---
|
||
|
||
savePART ldx #FIN_DATA-DEBUT_DATA
|
||
ldy #A1
|
||
|
||
saveIT stx proWRITEGAME+8
|
||
sty proWRITEGAME+4
|
||
jsl GSOS
|
||
dw $2013
|
||
adrl proWRITEGAME
|
||
rts
|
||
|
||
*--- For the game party
|
||
|
||
proCREATEGAME
|
||
dw 7 ; pcount
|
||
adrl pGAME ; pathname
|
||
dw $c3 ; access_code
|
||
dw $5d ; file_type
|
||
adrl $8020 ; aux_type
|
||
ds 2 ; storage_type
|
||
ds 4 ; eof
|
||
ds 4 ; resource_eof
|
||
|
||
proDESTROYGAME
|
||
dw 1 ; pcount
|
||
adrl pGAME ; pathname
|
||
|
||
proOPENGAME
|
||
dw 2
|
||
ds 2
|
||
adrl pGAME
|
||
|
||
proREADGAME
|
||
dw 4 ; 0 - pcount
|
||
ds 2 ; 2 - ref_num
|
||
adrl pGAME ; 4 - data_buffer
|
||
ds 4 ; 8 - request_count
|
||
ds 4 ; C - transfer_count
|
||
|
||
proWRITEGAME
|
||
dw 5 ; 0 - pcount
|
||
ds 2 ; 2 - ref_num
|
||
adrl pGAME ; 4 - data_buffer (we are in same bank)
|
||
ds 4 ; 8 - request_count
|
||
ds 4 ; C - transfer_count
|
||
dw 1 ; cache_priority
|
||
|
||
pGAME strl '0/ '
|
||
|
||
*-----------------------------------
|
||
* DES DONNES 16-BITS
|
||
*-----------------------------------
|
||
|
||
*----------------------------------- Memory Manager
|
||
|
||
appID ds 2
|
||
myID ds 2
|
||
myDP ds 2
|
||
|
||
ptrSCREEN adrl ptr012000 ; l'<27>cran actif
|
||
|
||
ptrTEXT adrl $00000000 ; 32k bank 1
|
||
ptrBACKGND adrl $00008000 ; 32k
|
||
ptrUNPACK adrl $00000000 ; 32k bank 2
|
||
ptrIMAGE adrl $00008000 ; 32k
|
||
|
||
*----------------------------------- Quickdraw II
|
||
|
||
palette320 dw $0000,$0777,$0841,$072C,$000F,$0080,$0F70,$0D00
|
||
dw $0FA9,$0FF0,$00E0,$04DF,$0DAF,$078F,$0CCC,$0FFF
|
||
|
||
palette640 dw $0000,$000F,$00F0,$0FFF,$0000,$000F,$0FF0,$0FFF
|
||
dw $0000,$0F00,$00F0,$0FFF,$0000,$000F,$0FF0,$0FFF
|
||
|
||
blackPATTERN ds 32,$00
|
||
ds 32,$11
|
||
ds 32,$22
|
||
ds 32,$33
|
||
ds 32,$44
|
||
ds 32,$55
|
||
ds 32,$66
|
||
ds 32,$77
|
||
ds 32,$88
|
||
ds 32,$99
|
||
ds 32,$aa
|
||
ds 32,$bb
|
||
ds 32,$cc
|
||
ds 32,$dd
|
||
ds 32,$ee
|
||
whitePATTERN ds 32,$ff
|
||
|
||
curPATTERN ds 32
|
||
|
||
*----------------------------------- Error messages
|
||
|
||
tolSTR1 str 'Error while loading tools'
|
||
memSTR1 str 'Cannot allocate memory'
|
||
filSTR1 str 'Cannot load file'
|
||
errSTR1 str 'Quit'
|
||
errSTR2 str ''
|
||
|
||
*----------------------------------- Tool Locator
|
||
|
||
ssREC ds 4
|
||
|
||
toolTBL dw $0000 ; flags
|
||
dw $C000 ; videoMode (shadowing + fast port)
|
||
dw $0000 ; resFileID
|
||
ADRL $00000000 ; dPageHandle
|
||
dw $0011
|
||
dw $0003 ; Miscellaneous Tool
|
||
dw $0300
|
||
dw $0004 ; QuickDraw II
|
||
dw $0301
|
||
dw $0005 ; Desk Manager
|
||
dw $0302
|
||
dw $0006 ; Event Manager
|
||
dw $0300
|
||
dw $0008 ; Sound Tool Set
|
||
dw $0100
|
||
dw $000B ; Integer Math Tool Set
|
||
dw $0200
|
||
dw $000E ; Window Manager
|
||
dw $0301
|
||
dw $000F ; Menu Manager
|
||
dw $0301
|
||
dw $0010 ; Control Manager
|
||
dw $0301
|
||
dw $0012 ; QuickDraw II Auxiliary
|
||
dw $0301
|
||
dw $0014 ; LineEdit Tool Set
|
||
dw $0301
|
||
dw $0015 ; Dialog Manager
|
||
dw $0301
|
||
dw $0016 ; Scrap Manager
|
||
dw $0300
|
||
dw $0017 ; Standard File Tool Set
|
||
dw $0301
|
||
dw $001B ; Font Manager
|
||
dw $0301
|
||
dw $001C ; List Manager
|
||
dw $0301
|
||
dw $001E ; Resource Manager
|
||
dw $0100
|
||
|
||
*----------------------------------- GS/OS
|
||
|
||
proERR ds 2 ; GS/OS error code
|
||
|
||
proCLOSE dw 1 ; pcount
|
||
ds 2 ; ID
|
||
|
||
proQUIT dw 2 ; pcount
|
||
ds 4 ; pathname
|
||
ds 2 ; flags
|
||
|
||
*----------------------------------- Window Manager
|
||
|
||
mainPORT ds 4
|
||
|
||
taskREC ds 2 ; wmWhat +0
|
||
taskMESSAGE ds 4 ; wmMessage +2
|
||
taskWHEN ds 4 ; wmWhen +6
|
||
taskWHERE ds 4 ; wmWhere +10
|
||
taskMODIFIERS ds 2 ; wmModifiers +14
|
||
taskDATA ds 4 ; wmTaskData +16
|
||
|
||
*----------------------------------- Standard File Tool Set
|
||
|
||
strLOADFILE str 'Charger quelle partie ?'
|
||
strSAVEFILE str 'Enregistrer sous...'
|
||
|
||
typeLIST hex 01
|
||
hex 5d ; Game/Edu files
|
||
|
||
replyPTR ds 2 ; 0 good
|
||
ds 2 ; 2 fileType
|
||
ds 2 ; 4 auxFileType
|
||
namePATH hex 06 ; 6 fileName
|
||
namePATH1 asc 'Partie' ; 7 fileName (16 normally)
|
||
ds 9
|
||
|
||
loadPATH ds 1 ; 22 fullPathname (string length)
|
||
loadPATH1 ds 129 ; 23 fullPathname (128 normally)
|
||
|
||
*-----------------------------------
|
||
* CODE BASIC EN ASM :-)
|
||
*-----------------------------------
|
||
|
||
put leretour.s
|
||
put engine.s
|
||
put fr.s
|
||
put ../common/midi.s
|
||
put ../common/images.s
|
||
|
||
*--- It's the end
|
||
|