antoine-source/leretour/apple2/fr/iigs.s
Antoine Vignau ca6876e4cd VF terminée
2024-01-11 14:28:30 +01:00

718 lines
11 KiB
ArmAsm
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

*
* Le retour du Dr Genius
*
* (c) 1983, Loriciels
* (c) 2023, Brutal Deluxe Software (Apple II)
*
* Les accents (encore et toujours)
*
* <EFBFBD> 88
* 89
* Ť 8d
* Ž 8e
* Ź 8f
* <EFBFBD> 90
* 91
* 94
* 95
* 99
* ť 9d
* ž 9e
* (c) a9 (only c)
* oe cf
mx %00
rel
lst off
*-----------------------------------
* MACROS
*-----------------------------------
use 4/Event.Macs
use 4/Font.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
dpFOUR = dpTHREE+4
dpCOL1 = $90
dpCOL2 = dpCOL1+1
dpPX = dpCOL2+1
dpBK = dpPX+1
*-----------------------
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-2 ; 9 - 1 partout...
row1 = row0+charHEIGHT ; 19
row2 = row1+charHEIGHT ; 29
row3 = row2+charHEIGHT ; 39
row4 = row3+charHEIGHT ; 49
row5 = row4+charHEIGHT ; 59
row6 = row5+charHEIGHT ; 69
row7 = row6+charHEIGHT ; 79
row8 = row7+charHEIGHT ; 89
row9 = row8+charHEIGHT ; 99
row10 = row9+charHEIGHT ; 109
row11 = row10+charHEIGHT ; 119
row12 = row11+charHEIGHT ; 129
row13 = row12+charHEIGHT ; 139
row14 = row13+charHEIGHT ; 149
row15 = row14+charHEIGHT ; 159
row16 = row15+charHEIGHT ; 169
row17 = row16+charHEIGHT ; 179
row18 = row17+charHEIGHT ; 189
row19 = row18+charHEIGHT ; 199
ptr012000 = $012000
ptrE12000 = $e12000
*-----------------------
TRUE = 1
FALSE = 0
*-----------------------------------
* DU 16-BITS
*-----------------------------------
ICI phk
plb
clc
xce
rep #$30
tdc
sta myDP
lda #screenRECT
stal $300
lda #^screenRECT
stal $302
_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 #refIsResource
PushLong #1
_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
*-----------------------------------
* C'EST L'HEURE DE L'INTRODUCTION
*-----------------------------------
jsr intro
*-----------------------------------
* IL FAUT JOUER MAINTENANT
*-----------------------------------
* jsr initMIDI
* jsr doSOUNDON
sei
PushLong #intTIME
_SetHeartBeat
cli
jmp PLAY
*-----------------------------------
* AU REVOIR LE IIGS
*-----------------------------------
QUIT rep #$30
jsr stopMIDI
sei
PushLong #intTIME
_DelHeartBeat
cli
meQUIT PushWord #refIsHandle
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 ptrSCREEN
PushLong ptrBACKGND
PushLong #32768
_BlockMove
_ShowCursor
rts
*-----------------------------------
* RESTORE THE SHR SCREEN
*-----------------------------------
loadBACK _HideCursor
PushLong ptrBACKGND
PushLong ptrSCREEN
PushLong #32768
_BlockMove
rts
*-----------------------------------
* LOAD/SAVE
*-----------------------------------
*----------------------------------- Open
mx %11
doLOAD sta pGAME+10
rep #$30
jsr loadALL
sep #$30
rts
mx %00
jsr doSOUNDOFF
jsr saveBACK
PushWord #30
PushWord #43
PushLong #strLOADFILE
PushLong #0
PushLong #typeLIST
PushLong #replyPTR
_SFGetFile
jsr loadBACK
jsr doSOUNDON
lda replyPTR
bne doLOAD1
rts
doLOAD1 jsr copyPATH
jsr loadALL
rts
*----------------------------------- Save
mx %11
doSAVE sta pGAME+10
rep #$30
jsr saveALL
sep #$30
rts
mx %00
jsr doSOUNDOFF
jsr saveBACK
PushWord #25
PushWord #36
PushLong #strSAVEFILE
PushLong #namePATH
PushWord #15
PushLong #replyPTR
_SFPutFile
jsr loadBACK
jsr doSOUNDON
lda replyPTR
bne doSAVE1
rts
doSAVE1 jsr copyPATH
jsr saveALL
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Ž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 '1/Partie0' ; +10 pour la partie
*-----------------------------------
* DES DONNES 16-BITS
*-----------------------------------
*----------------------------------- Memory Manager
appID ds 2
myID ds 2
myDP ds 2
ptrSCREEN adrl ptr012000 ; l'Ž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
redPATTERN ds 32,$77
ds 32,$88
yellowPATTERN ds 32,$99
ds 32,$aa
cyanPATTERN ds 32,$bb
ds 32,$cc
ds 32,$dd
ds 32,$ee
whitePATTERN ds 32,$ff
checkeredPATTERN
hex 0F0F0F0F
hex F0F0F0F0
hex 0F0F0F0F
hex F0F0F0F0
hex 0F0F0F0F
hex F0F0F0F0
hex 0F0F0F0F
hex F0F0F0F0
curPATTERN ds 32
curPENSIZE ds 4
*----------------------------------- 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 introcode.s
put fr.s
put midi.s
put images.s
*--- It's the end