mirror of
https://github.com/antoinevignau/source.git
synced 2024-11-04 18:05:25 +00:00
1117 lines
14 KiB
ArmAsm
1117 lines
14 KiB
ArmAsm
*
|
||
* Le retour du Dr Genius
|
||
*
|
||
* (c) 1983, Loriciels
|
||
* (c) 2023, Brutal Deluxe Software (Apple II)
|
||
*
|
||
|
||
mx %00
|
||
lst off
|
||
|
||
*-----------------------------------
|
||
* LES PRIMITIVES 8-BITS EN 16-BITS
|
||
*-----------------------------------
|
||
|
||
mx %11
|
||
|
||
printNIVEAU ora #'0'
|
||
sta strNIVEAU+9
|
||
|
||
rep #$30
|
||
|
||
PushWord #250
|
||
PushWord #10
|
||
_MoveTo
|
||
PushLong #strNIVEAU
|
||
_DrawCString
|
||
sep #$30
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
mx %00
|
||
|
||
HGR rep #$30
|
||
PushWord #0
|
||
_ClearScreen
|
||
sep #$30
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
RDKEY phx
|
||
jsr CURSOR ; shows the cursor
|
||
rep #$30
|
||
|
||
]lp inc VBLCounter0 ; for RND
|
||
|
||
pha
|
||
PushWord #%00000000_00001000
|
||
PushLong #taskREC
|
||
_GetNextEvent
|
||
pla
|
||
beq ]lp
|
||
|
||
lda taskREC
|
||
cmp #keyDownEvt
|
||
bne ]lp
|
||
|
||
lda taskMESSAGE
|
||
|
||
sep #$30
|
||
plx
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
HOME rep #$30
|
||
|
||
*----------- Efface le simulacre d'ecran texte
|
||
|
||
lda ptrTEXT
|
||
sta dpTO
|
||
lda ptrTEXT+2
|
||
sta dpTO+2
|
||
|
||
ldy #0
|
||
tya
|
||
]lp sta [dpTO],y
|
||
iny
|
||
iny
|
||
bpl ]lp
|
||
|
||
lda #bottomRECT
|
||
|
||
*----------- Efface les 3 lignes du bas
|
||
|
||
mx %00
|
||
|
||
eraseLINES sta pointerRECT
|
||
|
||
PushLong #curPATTERN
|
||
_GetPenPat
|
||
|
||
PushLong #blackPATTERN
|
||
_SetPenPat
|
||
|
||
PushLong pointerRECT
|
||
_PaintRect
|
||
|
||
PushLong #curPATTERN
|
||
_SetPenPat
|
||
|
||
sep #$30
|
||
rts
|
||
|
||
*-----------
|
||
|
||
pointerRECT adrl bottomRECT
|
||
|
||
bottomRECT dw 160,0,199,319
|
||
lastlineRECT dw 190,0,199,319
|
||
cursorRECT dw 0,0,0,0 ; y2 and x2 are y1+7 and x1+7
|
||
|
||
testme ds 2
|
||
|
||
*-----------------------------------
|
||
|
||
mx %11
|
||
|
||
*CURSOR_ERASE
|
||
phx
|
||
lda CH
|
||
pha
|
||
lda CV
|
||
pha
|
||
|
||
lda #' '
|
||
jsr COUT
|
||
|
||
pla
|
||
sta CV
|
||
pla
|
||
sta CH
|
||
|
||
dec CH
|
||
jsr TABV
|
||
plx
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
mx %11
|
||
|
||
CURSOR_ERASE
|
||
phx
|
||
rep #$30
|
||
|
||
lda textY
|
||
sta cursorRECT+4
|
||
sec
|
||
sbc #8
|
||
sta cursorRECT
|
||
|
||
lda textX
|
||
sta cursorRECT+2
|
||
clc
|
||
adc #8
|
||
sta cursorRECT+6
|
||
|
||
lda #cursorRECT
|
||
jsr eraseLINES ; retour en 8-bits
|
||
|
||
mx %11
|
||
|
||
dec CH
|
||
jsr TABV
|
||
plx
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
mx %11
|
||
|
||
CURSOR lda CH
|
||
pha
|
||
lda CV
|
||
pha
|
||
lda #$a5 ; black bullet
|
||
jsr COUT
|
||
pla
|
||
sta CV
|
||
pla
|
||
sta CH
|
||
|
||
*-----------------------------------
|
||
|
||
mx %11
|
||
|
||
TABV rep #$30
|
||
lda CV
|
||
and #$ff
|
||
asl
|
||
tax
|
||
lda text2shr,x
|
||
sta textY
|
||
|
||
lda CH ; 8 pixels de large par caractere
|
||
and #$ff
|
||
asl
|
||
asl
|
||
asl
|
||
sta textX
|
||
sep #$30
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
mx %11
|
||
|
||
GOTOXY stx textX
|
||
sty textY
|
||
lda #0
|
||
sta textX+1
|
||
sta textY+1
|
||
|
||
rep #$30
|
||
PushWord textX
|
||
PushWord textY
|
||
_MoveTo
|
||
sep #$30
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
mx %11
|
||
|
||
COUTXY pea ^COUTXY
|
||
phx
|
||
phy
|
||
rep #$30
|
||
_DrawCString
|
||
sep #$30
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
mx %11
|
||
|
||
COUT phx
|
||
phy
|
||
rep #$30
|
||
and #$ff
|
||
cmp #chrRET ; next line, please
|
||
beq COUT1
|
||
pha
|
||
|
||
PushWord textX
|
||
PushWord textY
|
||
_MoveTo
|
||
_DrawChar
|
||
|
||
*----------- next X position
|
||
|
||
sep #$20
|
||
inc CH
|
||
rep #$20
|
||
|
||
lda textX
|
||
clc
|
||
adc #8
|
||
sta textX
|
||
cmp #maxX
|
||
bcs COUT1
|
||
|
||
COUT99 sep #$30
|
||
ply
|
||
plx
|
||
rts
|
||
|
||
*----------- next Y position
|
||
|
||
mx %00
|
||
|
||
COUT1 stz textX ; a new line
|
||
sep #$20
|
||
stz CH
|
||
|
||
lda CV ; o<> est-on ?
|
||
cmp #maxTROW
|
||
bcs COUT2 ; on est deja sur la derniere ligne
|
||
|
||
inc CV ; non, encore de la place
|
||
rep #$20
|
||
lda textY
|
||
clc
|
||
adc #10
|
||
sta textY
|
||
bra COUT99 ; on sort
|
||
|
||
*----------- on doit bouger les <EFBFBD>crans
|
||
*
|
||
* 1 - ptrTEXTE est d<EFBFBD>cal<EFBFBD> de 8 lignes vers le haut
|
||
* 2 - on copie 10 lignes de l'<EFBFBD>cran vers ptrTEXT
|
||
* 3 - on d<EFBFBD>cale le texte d'une ligne vers le haut
|
||
* 4 - on met un bloc noir
|
||
|
||
mx %00
|
||
|
||
COUT2 rep #$20
|
||
|
||
*----------- Etape 1
|
||
|
||
lda ptrTEXT+2 ; source commence ligne 10
|
||
pha
|
||
lda ptrTEXT
|
||
clc
|
||
adc #160*10
|
||
pha
|
||
PushLong ptrTEXT ; destination en haut
|
||
PushLong #160*150 ; on copie 150 lignes
|
||
_BlockMove
|
||
|
||
*----------- Etape 2
|
||
|
||
lda ptrSCREEN+2 ; source commence ligne 160
|
||
pha
|
||
lda ptrSCREEN
|
||
clc
|
||
adc #160*160
|
||
pha
|
||
|
||
lda ptrTEXT+2 ; destination commence ligne 150
|
||
pha
|
||
lda ptrTEXT
|
||
clc
|
||
adc #160*150
|
||
pha
|
||
PushLong #160*10 ; on copie 10 lignes
|
||
_BlockMove
|
||
|
||
*----------- Etape 3
|
||
|
||
lda ptrSCREEN+2 ; source commence ligne 170
|
||
pha
|
||
lda ptrSCREEN
|
||
clc
|
||
adc #160*170
|
||
pha
|
||
|
||
lda ptrSCREEN+2 ; destination commence ligne 160
|
||
pha
|
||
lda ptrSCREEN
|
||
clc
|
||
adc #160*160
|
||
pha
|
||
|
||
PushLong #160*30 ; on copie 30 lignes
|
||
_BlockMove
|
||
|
||
*----------- Etape 3
|
||
|
||
lda #lastlineRECT
|
||
jsr eraseLINES ; en 8-bits <20> la sortie
|
||
|
||
mx %11
|
||
|
||
ply
|
||
plx
|
||
rts
|
||
|
||
*----------- Exit
|
||
*
|
||
* De 160 <EFBFBD> 199, ce sont les lignes de texte
|
||
|
||
text2shr dw 9 ; 0
|
||
dw 19 ; 1
|
||
dw 29 ; 2
|
||
dw 39 ; 3
|
||
dw 49 ; 4
|
||
dw 59 ; 5
|
||
dw 69 ; 6
|
||
dw 79 ; 7
|
||
dw 89 ; 8
|
||
dw 99 ; 9
|
||
dw 109 ; 10
|
||
dw 119 ; 11
|
||
dw 129 ; 12
|
||
dw 139 ; 13
|
||
dw 149 ; 14
|
||
dw 159 ; 15
|
||
dw 169 ; 16
|
||
dw 179 ; 17
|
||
dw 189 ; 18
|
||
dw 199 ; 19
|
||
|
||
*-----------------------------------
|
||
|
||
mx %11
|
||
|
||
RND rep #$30
|
||
ldal VERTCNT
|
||
xba
|
||
clc
|
||
adc VBLCounter0
|
||
sta VBLCounter0
|
||
and #$ff
|
||
sep #$30
|
||
rts
|
||
|
||
VBLCounter0 ds 2
|
||
|
||
*-----------------------------------
|
||
* LES SONS DE L'ORIC
|
||
*-----------------------------------
|
||
|
||
mx %11
|
||
|
||
ext sndEXPLODE
|
||
ext sndZAP
|
||
|
||
EXPLODE rep #$30
|
||
ldx #^sndEXPLODE
|
||
ldy #sndEXPLODE
|
||
lda #139
|
||
bra playSOUND
|
||
|
||
ZAP rep #$30
|
||
ldx #^sndZAP
|
||
ldy #sndZAP
|
||
lda #22
|
||
|
||
playSOUND sty waveSTART
|
||
stx waveSTART+2
|
||
sta waveSIZE
|
||
|
||
lda seqPlay ; midi playing
|
||
beq playSOUND1 ; nope
|
||
_MSSuspend
|
||
|
||
playSOUND1 PushWord #%0000_0000_1000_0000
|
||
_FFStopSound
|
||
|
||
PushWord #$0701
|
||
PushLong #waveSTART
|
||
_FFStartSound
|
||
|
||
lda seqPlay ; midi playing
|
||
beq playSOUND2 ; nope
|
||
_MSResume
|
||
|
||
playSOUND2 sep #$30
|
||
rts
|
||
|
||
*--- Donnees Sound Tool Set
|
||
|
||
waveSTART ds 4 ; waveStart
|
||
waveSIZE ds 2 ; waveSize
|
||
dw 428 ; freqOffset
|
||
dw $0000 ; docBuffer
|
||
dw $0000 ; bufferSize
|
||
ds 4 ; nextWavePtr
|
||
dw 255 ; volSetting
|
||
|
||
*-----------------------------------
|
||
* RECOPIE ACTION A$
|
||
*-----------------------------------
|
||
|
||
mx %11
|
||
|
||
checkACTION lda #<newA$ ; POINTEUR
|
||
sta dpFROM
|
||
lda #>newA$
|
||
sta dpFROM+1
|
||
|
||
L953B LDY #0
|
||
LDA (dpFROM),Y
|
||
CMP MO$1 ; premier mot
|
||
BEQ L9546
|
||
JMP L95EF
|
||
L9546 INY
|
||
LDA (dpFROM),Y
|
||
BEQ L9552
|
||
CMP MO$2 ; second mot
|
||
BEQ L9552
|
||
JMP L95EF
|
||
|
||
L9552 INY ; on a trouv<75>, on g<>re
|
||
LDA (dpFROM),Y
|
||
INY
|
||
TAX
|
||
LDA (dpFROM),Y
|
||
CPX #$41 ; A
|
||
BEQ L958B
|
||
CPX #$42 ; B
|
||
BEQ L9593
|
||
CPX #$43 ; C
|
||
BEQ L95A3
|
||
CPX #$44 ; D
|
||
BEQ L95B3
|
||
CPX #$45 ; E
|
||
BEQ L95BE
|
||
CPX #$46 ; F
|
||
BEQ L95C7
|
||
CPX #$47 ; G
|
||
BEQ L95D0
|
||
CPX #$48 ; H
|
||
BEQ L95DB
|
||
CPX #$49 ; I
|
||
BEQ L95E7
|
||
|
||
LDX #0 ; sinon, on recopie until FF
|
||
L957F LDA (dpFROM),Y
|
||
STA BFE0,X
|
||
INY
|
||
INX
|
||
CMP #-1
|
||
BNE L957F
|
||
RTS
|
||
|
||
*-- A -
|
||
|
||
L958B CMP SALLE
|
||
BNE L95EF
|
||
JMP L9552 ; on boucle
|
||
|
||
*-- B -
|
||
|
||
L9593 TAX
|
||
LDA O,X ; les objets
|
||
CMP #-1
|
||
BEQ L9552
|
||
CMP SALLE
|
||
BEQ L9552
|
||
JMP L95EF
|
||
|
||
*-- C -
|
||
|
||
L95A3 TAX
|
||
LDA O,X
|
||
CMP #-1
|
||
BEQ L95EF
|
||
CMP SALLE
|
||
BEQ L95EF
|
||
JMP L9552
|
||
|
||
*-- D -
|
||
|
||
L95B3 TAX
|
||
LDA O,X
|
||
CMP #-1
|
||
BEQ L9552
|
||
JMP L95EF
|
||
|
||
*-- E -
|
||
|
||
L95BE TAX
|
||
LDA P,X
|
||
BNE L9552
|
||
JMP L95EF
|
||
|
||
*-- F -
|
||
|
||
L95C7 TAX
|
||
LDA P,X
|
||
BEQ L9552
|
||
JMP L95EF
|
||
|
||
*-- G -
|
||
|
||
L95D0 TAX
|
||
LDA C,X
|
||
CMP #1
|
||
BNE L95EF
|
||
JMP L9552
|
||
|
||
*-- H - RANDOM
|
||
|
||
L95DB STA $7C
|
||
* LDA $0306
|
||
jsr RND
|
||
CMP $7C
|
||
BCS L95EF
|
||
JMP L9552
|
||
|
||
*-- I -
|
||
|
||
L95E7 CMP SALLE
|
||
BEQ L95EF
|
||
JMP L9552
|
||
|
||
*--- next
|
||
|
||
L95EF inc dpFROM
|
||
bne L95F0
|
||
inc dpFROM+1
|
||
L95F0 lda (dpFROM) ; until the end
|
||
cmp #-1
|
||
bne L95EF
|
||
|
||
inc dpFROM
|
||
bne L95F1
|
||
inc dpFROM+1
|
||
L95F1 lda (dpFROM) ; on a parcouru
|
||
beq L9619 ; le tableau, on sort
|
||
jmp L953B
|
||
|
||
L9619 LDA #$00
|
||
STA BFF0
|
||
RTS
|
||
|
||
*--- data
|
||
|
||
BFE0 ds 16
|
||
BFF0 ds 16
|
||
|
||
*-----------------------------------
|
||
* AFFICHE UNE IMAGE
|
||
*-----------------------------------
|
||
|
||
mx %00
|
||
|
||
showPIC rep #$30
|
||
and #$00ff
|
||
stal $300 ; LOGO - LA SALLE
|
||
asl
|
||
tax
|
||
lda tblIMAGES,x
|
||
bne L92A5
|
||
showPIC99 sep #$30
|
||
rts
|
||
|
||
mx %00
|
||
|
||
L92A5 sta dpFROM
|
||
|
||
L92A6 ldy #0
|
||
lda (dpFROM),y
|
||
and #$ff
|
||
beq showPIC99
|
||
|
||
L92A7 CMP #'A' ; A $41 CURSET
|
||
BNE L92B1
|
||
JMP L9319
|
||
|
||
L92B1 CMP #'B' ; B $42 DRAW X,Y
|
||
BNE L92B8
|
||
JMP L933E
|
||
|
||
L92B8 CMP #'C' ; C $43 DRAW ^X,Y
|
||
BNE L92BF
|
||
JMP L9368
|
||
|
||
L92BF CMP #'D' ; D $44 DRAW X,^Y
|
||
BNE L92C6
|
||
JMP L9398
|
||
|
||
L92C6 CMP #'E' ; E $45 DRAW ^X,^Y
|
||
BNE L92CD
|
||
JMP L93C8
|
||
|
||
L92CD CMP #'F' ; F $46 MOVE X,Y
|
||
BNE L92D4
|
||
JMP L93FD
|
||
|
||
L92D4 CMP #'G' ; G $47 MOVE ^X,Y
|
||
BNE L92DB
|
||
JMP L9402
|
||
|
||
L92DB CMP #'H' ; H $48 MOVE X,^Y
|
||
BNE L92E2
|
||
JMP L9407
|
||
|
||
L92E2 CMP #'I' ; I $49 MOVE ^X,^Y
|
||
BNE L92E9
|
||
JMP L940C
|
||
|
||
L92E9 CMP #'J' ; J $4A INK
|
||
BNE L92F0
|
||
JMP L9411
|
||
|
||
L92F0 CMP #'K' ; K $4B PAPER
|
||
BNE L92F7
|
||
JMP L9426
|
||
|
||
L92F7 CMP #'L' ; L $4C FILL
|
||
BNE L92FE
|
||
JMP L943B
|
||
|
||
L92FE CMP #'M' ; M $4D MESSAGE
|
||
BNE L9305
|
||
JMP L9462
|
||
|
||
L9305 CMP #'N' ; N $4E CIRCLE
|
||
BNE L930C
|
||
JMP L94BC
|
||
|
||
L930C CMP #'O' ; O $4F OUTPUT
|
||
BNE L9313
|
||
JMP L94D8
|
||
|
||
L9313 lda #0
|
||
sep #$30
|
||
sta A2
|
||
rts
|
||
|
||
mx %00
|
||
|
||
*--- A $41 CURSET
|
||
|
||
L9319 iny
|
||
lda (dpFROM),y ; X
|
||
and #$ff
|
||
pha
|
||
sta curX
|
||
iny
|
||
lda (dpFROM),y ; Y
|
||
and #$ff
|
||
pha
|
||
sta curY
|
||
_MoveTo
|
||
jmp skip2
|
||
|
||
*--- B $42 DRAW X,Y
|
||
|
||
L933E lda #$01
|
||
L9340 sta theFB
|
||
iny
|
||
lda (dpFROM),y ; X
|
||
and #$ff
|
||
sta theX
|
||
iny
|
||
lda (dpFROM),y ; Y
|
||
and #$ff
|
||
sta theY
|
||
jsr DRAW
|
||
jmp skip2
|
||
|
||
*--- C $43 DRAW ^X,Y
|
||
|
||
L9368 lda #$01
|
||
L936A sta theFB
|
||
iny
|
||
lda (dpFROM),y ; X
|
||
and #$ff
|
||
eor #-1
|
||
inc
|
||
sta theX
|
||
iny
|
||
lda (dpFROM),y ; Y
|
||
and #$ff
|
||
sta theY
|
||
jsr DRAW
|
||
jmp skip2
|
||
|
||
*--- D $44 DRAW X,^Y
|
||
|
||
L9398 lda #$01
|
||
L939A sta theFB
|
||
iny
|
||
lda (dpFROM),y ; X
|
||
and #$ff
|
||
sta theX
|
||
iny
|
||
lda (dpFROM),y ; Y
|
||
and #$ff
|
||
eor #-1
|
||
inc
|
||
sta theY
|
||
jsr DRAW
|
||
jmp skip2
|
||
|
||
*--- E $45 DRAW ^X,^Y
|
||
|
||
L93C8 lda #$01
|
||
L93CA sta theFB
|
||
iny
|
||
lda (dpFROM),y ; X
|
||
and #$ff
|
||
eor #-1
|
||
inc
|
||
sta theX
|
||
iny
|
||
lda (dpFROM),y ; Y
|
||
and #$ff
|
||
eor #-1
|
||
inc
|
||
sta theY
|
||
jsr DRAW
|
||
jmp skip2
|
||
|
||
*--- F $46 DRAW X,Y,3 = CURMOV
|
||
|
||
L93FD lda #$03
|
||
jmp L9340
|
||
|
||
*--- G $47 DRAW ^X,Y,3 = CURMOV
|
||
|
||
L9402 lda #$03
|
||
jmp L936A
|
||
|
||
*--- H $48 DRAW X,^Y,3 = CURMOV
|
||
|
||
L9407 lda #$03
|
||
jmp L939A
|
||
|
||
*--- I $49 DRAW ^X,^Y,3 = CURMOV
|
||
|
||
L940C lda #$03
|
||
jmp L93CA
|
||
|
||
*--- J $4A INK
|
||
|
||
L9411 iny
|
||
lda (dpFROM),y ; X
|
||
and #$ff
|
||
sta theINK
|
||
jsr INK
|
||
jmp skip1
|
||
|
||
*--- K $4B PAPER
|
||
|
||
L9426 iny
|
||
lda (dpFROM),y ; X
|
||
and #$ff
|
||
sta thePAPER
|
||
jsr PAPER
|
||
jmp skip1
|
||
|
||
*--- L $4C FILL
|
||
|
||
L943B iny
|
||
lda (dpFROM),y ; X
|
||
and #$ff
|
||
clc
|
||
lda curX
|
||
sta fillX
|
||
iny
|
||
lda (dpFROM),y ; Y
|
||
and #$ff
|
||
clc
|
||
lda curY
|
||
sta fillY
|
||
iny
|
||
lda (dpFROM),y ; fill color
|
||
and #$ff
|
||
sta fillCOLOR
|
||
jsr FILL
|
||
jmp skip3
|
||
|
||
*--- M $4D CHAR_ALT
|
||
|
||
L9462 iny
|
||
lda (dpFROM),y ; X
|
||
and #$ff
|
||
pha
|
||
iny
|
||
lda (dpFROM),y ; Y
|
||
and #$ff
|
||
clc
|
||
adc #8 ; QDII: Y est le bas du texte, pas le haut
|
||
pha
|
||
_MoveTo
|
||
|
||
PushWord #0
|
||
_GetTextMode
|
||
|
||
PushWord #modeForeCopy
|
||
_SetTextMode
|
||
|
||
ldy #3
|
||
]lp lda (dpFROM),y
|
||
and #$ff
|
||
beq L94B9
|
||
phy
|
||
pha
|
||
_DrawChar
|
||
ply
|
||
iny
|
||
bne ]lp
|
||
L94B9 tya
|
||
clc
|
||
adc dpFROM
|
||
sta dpFROM
|
||
|
||
_SetTextMode
|
||
|
||
jmp skip0
|
||
|
||
*--- N $4E CIRCLE
|
||
|
||
L94BC iny
|
||
lda (dpFROM),y ; radius
|
||
and #$ff
|
||
sta theRADIUS
|
||
jsr CIRCLE
|
||
jmp skip1
|
||
|
||
*--- O $4F OUT
|
||
|
||
L94D8 iny
|
||
lda (dpFROM),y
|
||
and #$ff
|
||
sep #$30
|
||
sta A2 ; the variable at $400
|
||
rts
|
||
|
||
mx %00
|
||
|
||
*--- Next one, please...
|
||
|
||
skip3 inc dpFROM
|
||
skip2 inc dpFROM
|
||
skip1 inc dpFROM
|
||
skip0 inc dpFROM
|
||
|
||
jmp L92A6
|
||
|
||
*-----------------------------------
|
||
* IIGS PRIMITIVES
|
||
*-----------------------------------
|
||
|
||
* FG info
|
||
* 0: points are plotted in the background color
|
||
* 1: points are plotted in the foreground color
|
||
* 2: points are inverted (NOT)
|
||
* 3: points are not drawn but cursor is updated
|
||
|
||
* Color info
|
||
* 0: black
|
||
* 1: red
|
||
* 2: green
|
||
* 3: yellow
|
||
* 4: blue
|
||
* 5: magenta
|
||
* 6: cyan
|
||
* 7: white
|
||
|
||
*-----------------------------------
|
||
|
||
DRAW lda theFB
|
||
cmp #3 ; only move
|
||
beq DRAW9
|
||
|
||
tax
|
||
lda o2gsFB,x
|
||
and #$ff
|
||
pha
|
||
_SetPenMode
|
||
|
||
PushWord theX ; On trace une ligne
|
||
PushWord theY
|
||
_Line
|
||
PushLong #curY
|
||
_GetPen
|
||
rts
|
||
|
||
DRAW9 PushWord theX ; On d<>place le curseur seulement
|
||
PushWord theY
|
||
_Move
|
||
PushLong #curY
|
||
_GetPen
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
INK ldx theINK
|
||
lda o2gsCOLOR,x
|
||
and #$ff
|
||
sta iigsINK
|
||
|
||
PushWord #0
|
||
PushWord #15
|
||
asl
|
||
tax
|
||
lda palette320,x
|
||
pha
|
||
_SetColorEntry
|
||
|
||
* PushWord #^blackPATTERN
|
||
* asl
|
||
* asl
|
||
* asl
|
||
* asl
|
||
* asl
|
||
* clc
|
||
* adc #blackPATTERN
|
||
* pha
|
||
* _SetPenPat
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
PAPER ldx thePAPER
|
||
lda o2gsCOLOR,x
|
||
and #$ff
|
||
sta iigsPAPER
|
||
|
||
PushWord #0
|
||
PushWord #0
|
||
|
||
asl
|
||
tax
|
||
lda palette320,x
|
||
pha
|
||
_SetColorEntry
|
||
|
||
ldal $c034
|
||
inc
|
||
stal $c034
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
resMode = %0001_0000000000_10
|
||
|
||
FILL ldx fillCOLOR ; sets the pattern to use
|
||
lda o2gsCOLOR,x
|
||
and #$ff
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
clc
|
||
adc #blackPATTERN
|
||
sta patternPtr
|
||
|
||
PushLong #srcLocInfoPtr
|
||
PushLong #srcRect
|
||
PushLong #srcLocInfoPtr
|
||
PushLong #srcRect
|
||
PushWord fillX
|
||
PushWord fillY
|
||
PushWord #resMode
|
||
PushLong patternPtr
|
||
PushLong #leakTblPtr
|
||
_SeedFill
|
||
rts
|
||
|
||
*-----------------------------------
|
||
|
||
CIRCLE lda curX
|
||
sec
|
||
sbc theRADIUS
|
||
bpl CIRCLE1
|
||
lda #0
|
||
CIRCLE1 sta circleRECT+2
|
||
|
||
lda curX
|
||
clc
|
||
adc theRADIUS
|
||
cmp #maxX
|
||
bcc CIRCLE2
|
||
lda #maxX-1
|
||
CIRCLE2 sta circleRECT+6
|
||
|
||
lda curY
|
||
sec
|
||
sbc theRADIUS
|
||
bpl CIRCLE3
|
||
lda #0
|
||
CIRCLE3 sta circleRECT
|
||
|
||
lda curY
|
||
clc
|
||
adc theRADIUS
|
||
cmp #maxY
|
||
bcc CIRCLE4
|
||
lda #maxY-1
|
||
CIRCLE4 sta circleRECT+4
|
||
|
||
PushLong #circleRECT
|
||
_FrameOval
|
||
rts
|
||
|
||
*-----------------------------------
|
||
* DONNEES
|
||
*-----------------------------------
|
||
|
||
o2gsCOLOR dfb 0,7,10,9,4,12,11,15
|
||
o2gsFB dfb 0,0,2,0
|
||
|
||
curY ds 2 ; cursor position
|
||
curX ds 2
|
||
|
||
*----------- IIgs values
|
||
|
||
iigsINK ds 2 ; translated IIgs data
|
||
iigsPAPER ds 2
|
||
iigsFB ds 2
|
||
|
||
*----------- ORIC values
|
||
|
||
theINK ds 2 ; original Oric data
|
||
thePAPER ds 2
|
||
theFB ds 2
|
||
theX ds 2
|
||
theY ds 2
|
||
|
||
*----------- FILL
|
||
|
||
fillX ds 2
|
||
fillY ds 2
|
||
fillCOLOR ds 2
|
||
|
||
srcLocInfoPtr
|
||
dw mode320 ; mode 320
|
||
adrl ptr012000
|
||
dw 160
|
||
dw 0,0,179,239
|
||
|
||
srcRect dw 0,0,179,239
|
||
|
||
patternPtr adrl blackPATTERN ; pointer to pattern
|
||
|
||
leakTblPtr dw 1
|
||
dw $0000 ; color 0 is concerned
|
||
|
||
*----------- CIRCLE
|
||
|
||
theRADIUS ds 2
|
||
|
||
circleRECT ds 2 ; Y0
|
||
ds 2 ; X0
|
||
ds 2 ; Y1
|
||
ds 2 ; X1
|