plasmag: still trying to find a good plasma

this one is from French Touch, let's see if I can get it compiling
This commit is contained in:
Vince Weaver 2023-08-31 00:18:30 -04:00
parent cb9795c6e4
commit c3b9e1a713
8 changed files with 7637 additions and 0 deletions

View File

@ -0,0 +1 @@
Frenchtouch released this GPLv3

View File

@ -0,0 +1,31 @@
include ../../../Makefile.inc
DOS33 = ../../../utils/dos33fs-utils/dos33
TOKENIZE = ../../../utils/asoft_basic-utils/tokenize_asoft
LINKERSCRIPTS = ../../../linker_scripts
EMPTYDISK = ../../../empty_disk/empty.dsk
all: plasmag.dsk
plasmag.dsk: HELLO PLASMAG
cp $(EMPTYDISK) plasmag.dsk
$(DOS33) -y plasmag.dsk SAVE A HELLO
$(DOS33) -y plasmag.dsk BSAVE -a 0x4000 PLASMAG
###
HELLO: hello.bas
$(TOKENIZE) < hello.bas > HELLO
###
PLASMAG: plasmag.o
ld65 -o PLASMAG plasmag.o -C $(LINKERSCRIPTS)/apple2_4000.inc
plasmag.o: plasmag.s
ca65 -o plasmag.o plasmag.s -l plasmag.lst
###
clean:
rm -f *~ *.o *.lst PLASMAG HELLO

View File

@ -0,0 +1,161 @@
;@com.wudsn.ide.asm.hardware=APPLE2
; ACME 0.90
; PLASMAGORIA
; boot0 (T0/S0)
; version 0.3
; + interruption spécial GS (réactive language card + jmp to player)
; #SLOT variable pour MB
; - bug IIGS (=> fixe pas IIc)
!convtab "a2txt.bin" ; incorporation table caractère APPLE II (normal) générale
!sl "bootlabel.a"
*= $800 ; ORG = $800
; CONSTANTE
DEBUT2 = $F106
RoutINTGS = $4000
; variable PAGE ZERO
bMocking = $08 ; Mockingboard (00 - NOP / 01 - OK)
bIIc = $09 ; byte IIc (00 = //c | other = pas //c !)
bMachine = $0A ; byte MACHINE ($7F/IIE | $FF/GS)
OUT2 = $22 ; +$21
Temp = $FF
; variables
OffMin = $F0
!byte 01 ; premier octet réservé : nb de secteur à charger lors du boot 0
START
!zone
; quand on arrive là, le drive tourne, x = 60 (si slot 6)
JMP .Init
DEC OffHi ;
.boucle
LDA OffHi
CMP #OffMin ; on est au bout ?
BEQ .FIN
STA $27
LDY nbSector ; nb Secteur
LDA TableInter,Y
STA $3D
JMP $C65C ; lecture par la routine en ROM carte Disk II (slot 6 only)
; le retour se fait par le JMP $801 en sortie de cette routine
.FIN
JMP $F100 ; saut Boot 2 (MAIN). Voilà c'est fini !
.Init JSR $FC58 ; HOME
LDA $C051 ; Text
LDA $C054 ; page 1
LDA $C052 ; Mixed Off
LDA $C057 ; hires
LDA $C083
LDA $C083 ; write/read to RAM bank2 (Langage Card)
LDA #$CE ; on écrit DEC nbSector en $801
STA $801 ; pour que le JMP $801 en fin de routine
LDA #<nbSector ; (en $C605)
STA $802 ; fasse une boucle avec le code en $801
LDA #>nbSector ;
STA $803
JMP .boucle
TableInter ; interleaving
!byte 0x00,0x0D,0x0B,0x09,0x07,0x05,0x03,0x01,0x0E,0x0C,0x0A,0x08,0x06,0x04,0x02,0x0F
OffHi
!byte 0xFF ; offset pour lecture secteur
nbSector
!byte 0x0F ; nb de sector à lire
; code executé APRES le saut au BOOT 2 (depuis main)
; (routine devant être exécutée en dehors de MAIN car utilisation de la ROM A2)
EXECFROMBOOT2
; détection APPLE II GS/IIE/IIc
LDA $C082 ; ROM utilisable entre $D000/$FFFF
; IIc ?
LDX $FBC0 ; détection IIc
BNE .tgs ; 0 = IIc / Other = pas IIc
; si IIc , on continue mais pas de son Mockingboard
STX bIIc ; 0 = IIc / Other = pas IIc
JMP .end ; boucle = FIN !
; IIgs ou IIe ?
.tgs STX bIIc ; pas IIc
SEC
JSR $FE1F ; TEST GS
BCS .tIIe ; si Carry, IIE
; IIGS
; on prépare bordure,fond,speed et INT !
LDA #$FF
STA bMachine ; positionnement type Machine GS
LDA $C036
AND #$7F
STA $C036 ; VITESSE LENTE
LDA $C034 ;
AND #$F0
STA $C034 ; BORDURE NOIRE
LDA $C022
AND #$F0 ; bit 0-3 à 0 = background noir
ORA #$F0 ; bit 7-4 à 1 = text blanc
STA $C022 ; background noir/text blanc
; mise en place vecteur interruption GS
LDA #<RoutINTGS
STA $3FE
LDA #>RoutINTGS
STA $3FF
JMP .tmb
.tIIe ; IIE
LDA #$7F ; Apple IIe
sta bMachine ; positionnement type Machine IIe
; test MB
.tmb
; MB / SLOT #?
LDA #00
STA OUT2
.bdet LDA #$07 ; on commence en $C7 jusqu'en $C1
ORA #$C0 ; -> $Cx
STA OUT2+1
LDY #04 ; $CX04
LDX #02 ; 2 vérifs
.bt LDA (OUT2),Y ; timer 6522 (Low Order Counter) - attention compte à rebour !
STA Temp ; 3 cycles
LDA (OUT2),Y ; + 5 cycles = 8 cycles entre les deux accès au timer
SEC ;
SBC Temp ;
CMP #$F8 ; -8 (compte à rebour) ?
BNE .Ko
DEX
BNE .bt ; boucle détection
INX ; Mocking OK (X=1)
.end ; GOOD GUY final !
STX bMocking ; save Mockingboard Info (note : si IIc, X = 0)
LDA $C083 ;
LDA $C083 ; RAM utilisable entre $D000/$FFFF (bank2)
JMP DEBUT2 ; retour dans main
; bad guy slot #
.Ko DEC .bdet+1 ; on décrémente le "slot"
BNE .bdet ; on boucle de 7 à 1
LDX #00
JMP .end ; on continue !

View File

@ -0,0 +1,778 @@
; PLASMAGORIA code from French Touch
; version 0.09
; !convtab "a2txt.bin" ;
; !sl "mainlabel.a"
; INCLUDE
; *= $F100 ; ORG = $F100 (RAM Langage Card)
; PSEUDO CATALOG Track/SectorDebut-Track/SectorFin (inclus)
; T00/S00 : BOOT0 ($800) x1
; T00/S01-S09 : MAIN ($F100) x8
; T00/S0A-S0F : FLOAD ($FA00) x6
; T01/S00 - T03/Sxx : ROUTINES ($4000) x??
; T04/S00 - T04/S06 : ZIC ($8000) x07
; CONSTANTES SYSTEME ===================
VERTBLANK = $C019 ;
; CONSTANTES PROGRAMME =================
DATADECOMP = $200 ; AUX
; SOUS-ROUTINES BOOT0
EXECFROMBOOT2 = $857 ; sous routine de détection type APPLE II (utilise ROM)
; SOUS-ROUTINES PROGRAMMES EXTERNES
HYPLOD = $FA00 ; routine Fast Load
PLASMA_DEBUT = $4009
;======PARAMETRES DU FAST LOAD
;-PARAMETRES D'ENTREE
PISDEP = $300 ;PISTE DE DEPART
SECDEP = $301 ;SECTEUR DE DEPART
BUFFER = $302 ;ADRESSE OU L'ON CHARGE
TOTSEC = $304 ;TOTAL DES SECTEURS A CHARGER
DRVNUM = $305 ;1 OU 2
ERRMAX = $306 ;MAXIMUM D'ERREURS TOLEREES SUR UN SECTEUR AVANT DE RENDRE LA MAIN
DLFLAG = $307 ;1=DELAI AVANT DE LIRE ;0=NON
;-PARAMETRES ENTREE/SORTIE
ICURTRK1 = $310 ;2*PISTE INITIALE DU DRIVE1 A GARNIR POUR LE 1ER APPEL
ICURTRK2 = $311 ;2*PISTE INITIALE DU DRIVE2 "
bAFFICHE = $312
BUFFERAFFH= $313 ; adresse du buffer d'affichage
BUFFERAFFL= $314 ; haut et bas
CARAFF = $315 ; caractère à afficher
; PAGE ZERO ===========================
; adresses fixes
;
; system
bMocking = $08 ; Mockingboard (00 - NOP / 01 - OK)
bIIc = $09 ; byte IIc (00 = //c | other = pas //c !)
bMachine = $0A ; byte MACHINE ($7F/IIE | $FF/GS)
bRefresh = $0B ; byte type NTSC/60Hz - PAL/50Hz (00 = 50HZ | 01 = 60 HZ)
bitsixset = $0C ; utiliser pour un SLV (set overflow) = $60
vblflag = $0D ; utilisée par interruption VBL sur //c
; general
;
OUT1 = $20 ; +$21
OUT2 = $22 ; +$23
; -------------------------------------
; adresses réutilisées suivant les parties
;
; decompression LZ4
Tmp = $F6
token = $F7
dest = $F8 ; + $F9
src1 = $FA ; + $FB
src2 = $FC ; + $FD
lenL = $FE
lenH = $FF
;
; player YM
TempP = $F8
Beat = $FA
Mark = $FB
Marker = $FC ; +$FD
Mem = $FE ; +$FF
; -------------------------------------
; ======== DEBUT PROGRAMME =========
START:
JMP EXECFROMBOOT2
VBLANK:
JMP VBLANK_GSE
DEBUT2:
;!zone
; ========= DETECT REFRESH ===========
DETECTREFRESH:
;!zone
LDA bIIc
BEQ DR_LOAD ; si c'est un IIc, on passe à la suite (chargement), le DETECT REFRESH ne marchera de toute façon pas.
; detection refresh rate (PAL/NTSC)
LDA bMachine ;
DR_lp1:
CMP VERTBLANK
Bpl DR_lp1 ; on attend la fin du VBL courant
LDA bMachine ; 3
DR_lp2:
CMP VERTBLANK ; 4
Bmi DR_lp2 ; 2 => on attend la fin du display courant/début du VBL
; début VBL
DR_BP:
INC COUNTREF ; 6 ; on incrémente le compteur
LDX #$09 ;
DR_WL1:
DEX ;
BNE DR_WL1 ; = 46 cycles
; + 6 + 3 + 3 + 4 + 3 = 65 !
LDA bMachine ; 3
LDA bMachine ; 3
CMP VERTBLANK ; 4
Bpl DR_BP ; 3 => on boucle tant qu'on est en VBL
LDA COUNTREF
CMP #72 ; >= 72 alors 50 HZ (120*65 cycles de VBL)
BCS DR_GO3
LDA #01 ; 60HZ (VBL = 70x65 cycles)
JMP DR_GO4
DR_GO3:
LDA #00 ; 50HZ (VBL = 120x65 cycles)
DR_GO4:
STA bRefresh
DR_LOAD:
; === CHARGEMENTS =====
; initialisation HyperLoad + divers !
LDX #00
STX ICURTRK1
STX bAFFICHE ; on désactive l'affichage lors du chargement (pour l'instant)
STX SECDEP ; secteur 00
STX BUFFER ; buffer low
INX ; 1
STX DRVNUM
STX DLFLAG
STX OUT1
; chargement ROUTINES
STX PISDEP ; piste 01
LDA #$40 ; buffer high -> $4000
STA BUFFER+1
LDA #45 ; nb secteurs
STA TOTSEC
JSR HYPLOD ; chargement !
; chargement ZIC
LDA #04
STA PISDEP ; piste 04
LDA #$00
STA BUFFER
STA SECDEP
LDA #$80 ; buffer high -> $8000
STA BUFFER+1
LDA #7 ; nb secteurs
STA TOTSEC
JSR HYPLOD ; chargement !
; =============================
LDA bIIc
BNE DR_SUITE ; si c'est pas un IIc, on passe à la suite
; ====== IIC ONLY =============
; si c'est un IIc mise en place de l'interruption !
LDA #00
STA vblflag ; initialisation vblflag pour l'interruption
LDA #<VBLANKIIc ; on fixe la routine d'appel au VBLANK
STA VBLANK+1 ; sur la routine
LDA #>VBLANKIIc ; //c
STA VBLANK+2
sei ; disable interrupts
lda #<VBLI ; on fixe le vecteur de l'interruption
STA $FFFE ; du IIc (VBL)
lda #>VBLI ; pour pointer
STA $FFFF ; sur notre routine VBLI
; on active la première interruption pour VBL
sta $c079 ; enable IOU access
sta $c05b ; enable VBL int (CLI)
sta $c078 ; disable IOU access
JMP DR_SUITE2
; =============================
DR_SUITE:
LDA bMocking
BEQ DR_SUITE2 ; s'il n'y a pas de MOCKINGBOARD détectée
; == PREPARATION MOCKINGBOARD =
LDA bMachine ; si IIGS
BMI DR_INITMB
; mise en place vecteur IIe
; (vecteur GS déjà mis en place dans BOOT)
LDA #<INTPLAYERYM
STA $FFFE
LDA #>INTPLAYERYM
STA $FFFF
DR_INITMB:
; init MB (OUT1/OUT2)
LDA #$FF
LDY #$03
STA (OUT2),Y ; STA $C403 ; DDRA1
LDY #$83
STA (OUT2),Y ; STA $C483 ; DDRA2
LDA #$07
LDY #$02
STA (OUT2),Y ; STA $C402 ; DDRB1
LDY #$82
STA (OUT2),Y ; STA $C482 ; DDRB2
; nécessaire ?
LDA #$00 ; Set fct "Reset"
LDY #$00
STA (OUT2),Y ; STA $C400
LDY #$80
STA (OUT2),Y ; STA $C480
LDA #$04 ; Set fct "Inactive"
LDY #$00
STA (OUT2),Y ; STA $C400
LDY #$80
STA (OUT2),Y ; STA $C480
; ---
; nettoyage TIMER
; ---
LDA OUT2+1
STA OUT1+1 ;
STA OFFBIT+2 ; fixe BIT $Cx04 (réinit interruption)
; =============================
DR_SUITE2:
; =============================================================================
; AFFICHAGE TITRE
JSR VBLANK
LDX #39
bAffTitle:
LDA Title01,X
STA $580,X
LDA Title02,X
STA $600,X
LDA Title03,X
STA $680,X
LDA Title04,X
STA $700,X
LDA Title05,X
STA $780,X
LDA Title06,X
STA $428,X
LDA Title07,X
STA $4A8,X
LDA Title08,X
STA $528,X
LDA Title09,X
STA $5A8,X
LDA Title10,X
STA $628,X
LDA Title11,X
STA $6A8,X
LDA Title12,X
STA $728,X
LDA Title13,X
STA $7A8,X
LDA Title14,X
STA $450,X
LDA Title15,X
STA $4D0,X
LDA Title16,X
STA $550,X
LDA Title17,X
STA $5D0,X
DEX
BPL bAffTitle
; --------------------------------------------------------
; effacement PAGE1 HGR
; X = $FF
INX ; => x =0
TXA ; A = 00 (noir en HGR)
LDY #32
bCleanHGR:
offHGR:
STA $2000,X
DEX
BNE bCleanHGR
INC offHGR+2
DEY
BNE bCleanHGR
; copie P1->P2
LDX #00
bMoveP1_P2:
LDA $400,X
STA $800,X
LDA $500,X
STA $900,X
LDA $600,X
STA $A00,X
LDA $700,X
STA $B00,X
DEX
BNE bMoveP1_P2
; =============================================================================
; DECOMPRESSION
; =============================================================================
JSR DECOMP
STA $C004 ; restore write MAIN Memory
; =============================================================================
; INIT INTERRUPTION + DATA
; =============================================================================
; mise en place de l'interruption
SEI ; inhib
; préparation interruption - TIMER 1 6522
LDA #%01000000 ; continuous interrupt / PB7 disabled
LDY #$0B
STA (OUT2),Y ; STA $C40B ; Auxiliary Control Register
LDA #%11000000 ;
LDY #$0D
STA (OUT2),Y ; STA $C40D ; interrupt flag register (Time Out of Timer 1/Int)
INY
STA (OUT2),Y ; STA $C40E ; interrupt Enable register (Timer 1 + Set)
; TIMER : 50 Hz = 20 ms = 20 000 microsecond = 20 000 tick environ (1 Mhz d'holorge) = $4E20
; calcul fin :
; 50 Hz = 20 ms
; 1.0205 Mhz = 1020500 cycles par seconde soit 1020.5 cycles par ms
; pour 20ms, il faut donc 1020.5*20 = 20410 cycles soit : $4FBA
LDA #$BA
LDY #04
STA (OUT2),Y ; STA $C404 ; T1C-Lower
LDA #$4F
INY
STA (OUT2),Y ; STA $C405 ; T1C-High
; --- initialisation Tables Offsets Data Registres, Offsets Loop, et Table Compression (MAIN)
LDX #13 ; registers (0-13)
; initialisation offset Registre (AUX) + Marker
STA $C003 ; READ AUX MEMORY
; Offsets Registres
LDX #14 ; registers [0-13 + marker (14)]
b2:
LDA TableOffsetDataB,X
STA Mem
CLC
ADC #02
STA TableOffsetDataB,X
LDA TableOffsetDataH,X
STA Mem+1
ADC #00
STA TableOffsetDataH,X
LDY #00
LDA (Mem),Y
STA TableCompteur,X
INY
LDA (Mem),Y
STA TableData,X
g2:
DEX
BPL b2
; ----------------------
STA $C002 ; READ MAIN MEMORY
; ---
; =============================================================================
; BOUCLE PRINCIPALE PLAYING
; =============================================================================
JMP PLASMA_DEBUT
; =============================================================================
; =============================================================================
; SOUS ROUTINES
; =============================================================================
; -------------------------------------
DECOMP:
; routine de décompression LZ4
; code: XXL and FOX (from Atari Scene)
; modified: FT
;
; dans A - partie haute adresse data compressées
; init
LDA #$80
STA src2+1
LDA #$00 ; commence en $00
STA src2
LDA #<DATADECOMP
STA dest
LDA #>DATADECOMP
STA dest+1
LDY #0
STY lenH
STY lenL
; init mémoire
STA $C000 ; 80STOREOFF
STA $C002 ; read MAIN Memory
STA $C005 ; write AUX Memory
STA $C008 ; zero Page = Main
; -------------------------------------
; décomp LZ4 routine
; -------------------------------------
BP:
jsr GET_BYTE
sta token
lsr
lsr
lsr
lsr
beq read_offset ; there is no literal
cmp #$0f
jsr getLength
b_literals:
jsr GET_BYTE
jsr store
bne b_literals
read_offset:
jsr GET_BYTE ; offset L
tax
sec
eor #$ff
adc dest
sta src1
txa
php
jsr GET_BYTE ; offset H
plp
bne not_done
tax
beq unlz4_done ; sortie routine !
not_done:
eor #$ff
adc dest+1 ; calcul offset H (absolu)
STA src1+1 ; sauvegarde de l'offset après correction hors page $C0 : $C0->$D0 / $D0->$E0
LDY #00 ; remise à 0 de Y
; c=1
lda token
and #$0f
adc #$03 ; 3+1=4
cmp #$13
jsr getLength
b1:
STA $C003 ; read AUX Memory
lda (src1),Y
STA $C002 ; read MAIN Memory
INC src1
BNE s1
TAX
INC src1+1
LDA src1+1
CMP #$C0
BEQ sss1
ss1:
TXA
s1:
jsr store
bne b1
jmp BP
sss1:
LDA #$D0
STA src1+1
JMP ss1
store:
sta (dest),Y
INC dest
BEQ s2
dec lenL
beq s2b
unlz4_done:
rts
s2b:
dec lenH
rts
s2:
INC dest+1
LDA dest+1
CMP #$C0
BEQ sss2
ss2:
dec lenL
beq s2b
rts
sss2:
LDA #$D0
STA dest+1
JMP ss2
getLength_next:
jsr GET_BYTE
tax
clc
adc lenL
bcc s3
inc lenH
s3:
inx
getLength:
sta lenL
beq getLength_next
tax
beq s4
inc lenH
s4:
rts
GET_BYTE:
LDA (src2),Y
INC src2
BEQ s5
RTS
s5:
INC src2+1
RTS
; =============================================================================
; =============================================================================
INTPLAYERYM: ; interruption toutes les 20ms (50Hz)
;
PHP ; on sauve les flags
PHA ; on sauve A
TXA ; on sauve
PHA ; X
TYA ; on sauve
PHA ; Y
LDA OUT1 ; permutation g/d
EOR #$80
STA OUT1
LDA OUT2
EOR #$80
STA OUT2
STA $C003 ; read AUX Memory
LDY #00
; remplissage REGISTRES (les 13 premiers)
LDX #00
YM_br1:
TXA
STA (OUT1),Y ; ORA1 (data)
LDA #$07 ; Set fct "Set PSG Reg #"
STA (OUT2),Y ; ORB1 (fct)
LDA #$04 ; Set fct "Inactive"
STA (OUT2),Y ; ORB1 (fct)
LDA TableData,X
STA (OUT1),Y ; ORA1 (data)
LDA #$06 ; Set fct "Write DATA"
STA (OUT2),Y ; ORB1 (fct)
LDA #$04 ; Set fct "Inactive"
STA (OUT2),Y ; ORB1 (fct)
INX
CPX #13
BNE YM_br1
; Registre R13
; x = 13
LDA TableData,X
CMP #$FF ; spécification YM format / shunte si = $FF
BEQ YM_shunteR13
STA TempP
TXA
STA (OUT1),Y ; ORA1 (data)
LDA #$07 ; Set fct "Set PSG Reg #"
STA (OUT2),Y ; ORB1 (fct)
LDA #$04 ; Set fct "Inactive"
STA (OUT2),Y ; ORB1 (fct)
LDA TempP
STA (OUT1),Y ; ORA1 (data)
LDA #$06 ; Set fct "Write DATA"
STA (OUT2),Y ; ORB1 (fct)
LDA #$04 ; Set fct "Inactive"
STA (OUT2),Y ; ORB1 (fct)
YM_shunteR13:
; lecture info MARKER Tempo
INX
; x = 14
LDA TableData,X
BEQ YM_suite
BPL YM_setMark ; si 0x01
INC Beat ; si 0x80 (ou 0x81)
LSR
BCC YM_suite ; si pas 0x81
YM_setMark:
INC Mark ; si 0x01 (ou 0x81)
YM_suite:
;
LDX #14
YM_b2:
DEC TableCompteur,X
BEQ YM_g1
YM_g2:
DEX
BPL YM_b2
OFFBIT:
BIT $C404 ; Clears interrupt (T1CL) pour pouvoir être de nouveau réutilisé!
YM_finInterrupt:
PLA
TAY ; on récup Y
PLA
TAX ; on récup X
PLA ; on récup A
PLP
STA $C002 ; read MAIN Memory
RTI ; sortie 1
YM_g1:
LDA TableOffsetDataB,X
STA Mem
CLC
ADC #02
STA TableOffsetDataB,X
LDA TableOffsetDataH,X
STA Mem+1
ADC #00
STA TableOffsetDataH,X
LDY #00
LDA (Mem),Y
BEQ YM_endframes
STA TableCompteur,X
INY
LDA (Mem),Y
STA TableData,X
JMP YM_g2
YM_endframes:
; on coupe le son
LDA #01 ; FIN !
STA Mark
JMP YM_finInterrupt
; ==============================================================================
; SOUS ROUTINES
; ==============================================================================
VBLI: ; routine executé lors de l'interruption VBL de la Mouse Rom d'un IIc
; on réactive l'interruption
sta $c079 ; enable IOU access
sta $c05b ; enable VBL int
sta $c078 ; disable IOU access
; on fixe le flag
LDA #$80
STA vblflag ; set hibit
RTI
; =============================================================================
VBLANKIIc: ; code from Prince Of Persia Source (Jordan Mechner - 1989)
cli ; enable interrupts
VB_l1:
bit vblflag
bpl VB_l1 ; wait for vblflag = 1
lsr vblflag ;...& set vblflag = 0
sei
rts
; =============================================================================
VBLANK_GSE:
LDA bMachine
VG_LVBL1:
CMP VERTBLANK
BPL VG_LVBL1 ; attend fin vbl courant
;LDA bMachine
VG_LVBL2:
CMP VERTBLANK
BMI VG_LVBL2 ; attend fin display
; début VBL
RTS
; ============================================================================
; offset début data 14 registres + marker
TableOffsetDataB: .byte $00,$F3,$F8,$4F,$98,$7B,$A4,$97,$B0,$C3,$34,$CB,$0E,$37,$A4 ; <- marker
TableOffsetDataH: .byte $02,$1F,$24,$33,$33,$54,$54,$58,$5C,$63,$6B,$71,$72,$72,$72
TableCompteur:
;!fill 15,00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00
TableData:
;!fill 15,00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00
COUNTREF: .byte 0
; ============================================================================
; attention à l'alignement
;..............0000000000111111111122222222223333333333
;..............0123456789012345678901234567890123456789
Title01: .byte " _____ ____ ___ ____ __ __ __ "
Title02: .byte "| | \ / _| \ / | | | "
Title03: .byte "| __| D )/ <_| _ | / /| | | "
;!align 255,0
.align 256
Title04: .byte "| |_ | /| _| | |/ / | _ | "
Title05: .byte "| _>| \| <_| | / \_| | | "
Title06: .byte "| | | . \ | | \ | | | "
Title07: .byte "|__| |__|\_|_____|__|__|\____|__|__| "
Title08: .byte " __ __ ___ _____ ____ __ "
Title09: .byte " /__)/__)(_ ( (_ /| )/ ( "
.align 256
;!align 255,0
Title10: .byte " / / ( (____)(__/ |/( __) "
Title11: .byte " ______ ___ __ __ __ __ __ "
Title12: .byte " | |/ \| | | / | | |"
Title13: .byte " | | | | | / /| | |"
Title14: .byte " |_| |_| O | | |/ / | _ |"
Title15: .byte " | | | | : / \_| | |"
.align 256
;!align 255,0
Title16: .byte " | | | | \ | | |"
Title17: .byte " |__| \___/ \__,_|\____|__|__|"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,103 @@
;; HARDWARE LOCATIONS
KEYPRESS = $C000
KEYRESET = $C010
;; SOFT SWITCHES
CLR80COL = $C000 ; PAGE0/PAGE1 normal
SET80COL = $C001 ; PAGE0/PAGE1 switches PAGE0 in Aux instead
EIGHTYCOLOFF = $C00C
EIGHTYCOLON = $C00D
TBCOLOR = $C022 ; IIgs text foreground / background colors
NEWVIDEO = $C029 ; IIgs graphics modes
SPEAKER = $C030
CLOCKCTL = $C034 ; bits 0-3 are IIgs border color
SET_GR = $C050
SET_TEXT = $C051
FULLGR = $C052
TEXTGR = $C053
PAGE0 = $C054
PAGE1 = $C055
LORES = $C056 ; Enable LORES graphics
HIRES = $C057 ; Enable HIRES graphics
AN3 = $C05E ; Annunciator 3
PADDLE_BUTTON0 = $C061
PADDLE_BUTTON1 = $C062
PADDL0 = $C064
PTRIG = $C070
;; BASIC ROUTINES
NORMAL = $F273
;; MONITOR ROUTINES
PLOT = $F800 ;; PLOT AT Y,A
PLOT1 = $F80E ;; PLOT at (GBASL),Y (need MASK to be $0f or $f0)
HLINE = $F819 ;; HLINE Y,$2C at A
VLINE = $F828 ;; VLINE A,$2D at Y
CLRSCR = $F832 ;; Clear low-res screen
CLRTOP = $F836 ;; clear only top of low-res screen
GBASCALC= $F847 ;; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear)
SETCOL = $F864 ;; COLOR=A
ROM_TEXT2COPY = $F962 ;; iigs
SETTXT = $FB36
SETGR = $FB40
TABV = $FB5B ;; VTAB to A
ROM_MACHINEID = $FBB3 ;; iigs
BELL = $FBDD ;; ring the bell
BASCALC = $FBC1 ;;
VTAB = $FC22 ;; VTAB to CV
HOME = $FC58 ;; Clear the text screen
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
CROUT1 = $FD8B
SETINV = $FE80 ;; INVERSE
SETNORM = $FE84 ;; NORMAL
COUT = $FDED ;; output A to screen
COUT1 = $FDF0 ;; output A to screen
COLOR_BLACK = 0
COLOR_RED = 1
COLOR_DARKBLUE = 2
COLOR_PURPLE = 3
COLOR_DARKGREEN = 4
COLOR_GREY = 5
COLOR_MEDIUMBLUE = 6
COLOR_LIGHTBLUE = 7
COLOR_BROWN = 8
COLOR_ORANGE = 9
COLOR_GREY2 = 10
COLOR_PINK = 11
COLOR_LIGHTGREEN = 12
COLOR_YELLOW = 13
COLOR_AQUA = 14
COLOR_WHITE = 15
COLOR_BOTH_BLACK = $00
COLOR_BOTH_RED = $11
COLOR_BOTH_DARKBLUE = $22
COLOR_BOTH_DARKGREEN = $44
COLOR_BOTH_GREY = $55
COLOR_BOTH_MEDIUMBLUE = $66
COLOR_BOTH_LIGHTBLUE = $77
COLOR_BOTH_BROWN = $88
COLOR_BOTH_ORANGE = $99
COLOR_BOTH_PINK = $BB
COLOR_BOTH_LIGHTGREEN = $CC
COLOR_BOTH_YELLOW = $DD
COLOR_BOTH_AQUA = $EE
COLOR_BOTH_WHITE = $FF

View File

@ -0,0 +1,2 @@
5 HOME
10 PRINT CHR$(4)"BRUN PLASMAG"

File diff suppressed because it is too large Load Diff