home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er Special 27
/
64er_Magazin_Sonderheft_27_19xx_Markt__Technik_de_Disk_2_of_2_Side_A.d64
/
alley.src
< prev
next >
Wrap
Text File
|
2022-10-26
|
4KB
|
97 lines
; ******************************
; ** **
; ** alley. sim. **
; ** **
; ** by **
; ** **
; ** stefan landfried **
; ** **
; ** (c) markt & technik **
; ** **
; ** verlags ag **
; ** **
; ******************************
;
org $c000 ; anfangsadresse = 49152
:getbyt = $b79e ;adressen fuer parameteruebergabe
:chkkom = $aefd
jsr chkkom ;programmstart und abfrage
jsr getbyt ;der verschiedenen parameter
stx modify1+1 ; rasterzeilenpositionen
stx modify2+1 ; des farbscrolles modifizieren
jsr chkkom ; auf komma pruefen
jsr getbyt ; parameter holen
stx modify3+1 ; geschwindigkeit modifizieren
jsr chkkom ; auf komma pruefen
jsr getbyt ; parameter holen
stx modify4+1 ; breite modifizieren
jsr chkkom ; auf komma pruefen
jsr getbyt ; parameter hohlen
stx modify5+1 ; und modifizieren
sei ; interrupt sperren
lda $dc0d ; cia-timer
and #%01111111 ; ausschalten
ora #%00000001
sta $dc0d
:modify2 lda #130 ; rasterzeile vorwaehlen
sta 53248+18
lda 53248+17 ; hi-byte des rasterstrahls
and #$7f ; ausschalten
sta 53248+17
lda #%10000001 ; rasterzeileninterrupt vorwaehlen
sta 53248+26
lda #<irq ; lo-byte der neuen routine
sta $0314 ; schreiben
lda #>irq ; hi-byte der neuen routine
sta $0315 ; schreiben
cli ; interrupt zulassen
rts ; zurueck ins basic
:irq lda 53248+25 ; interruptflag loeschen
sta 53248+25 ; um errorszu vermeiden
lda 53248+18 ; rasterstrahl ueberfruefen
cmp #000 ; 000 erreicht ?
beq scroll ; falls ja zur scrollroutine
ldx #00 ; x-register als indexzaehler
:loop1 lda farb,x ; farbcode laden
sta 53281 ; und ins hindergrundfarbreg. schreiben
lda zahl,x ; den zaehler laden
tay ; austausch von a nach y
:lp dey ; wartescheife
bne lp ; je groesser der zaehler desto laenger die schleife
inx ; x-register erhoehen
:modify4 cpx #8 ; schon alle 8 zeilen ?
bne loop1 ; falls nicht zu loop1
:modify5 lda #00 ; hintergrundfarbe poken
sta 53281
lda #000 ; rasterstahl vorwaehlen
sta 53248+18
jmp $ea31 ; sprung zur normalen interruptroutine
:farb b 01,07,03,13,05,14,06,10,02,04,08,09,15,12,11,00,00,11,12,14,09,08,04,02
b 10,06,14,05,13,03,07,01 ; farbcodes
:zahl b 02,08,08,08,09,08,09,08,10 ; zaehlcodes fuer die warteschleife
:scroll inc speed ; speed erhoehen
lda speed ; und ueberpruefen
:modify3 cmp #03 ; endwert erreicht
beq next ; falls ja eigentliches scrollen
jmp modify1 ; falls nicht normal weiter
:next lda farb ; ersten farbcode laden
pha ; auf stack schieben
ldy #01 ; y-register als index
:op lda farb,y ; schleife
dey ; in der alle
sta farb,y ; farben um
iny ; ein byte nach vorne
iny ; gerueckt
cpy #32 ; werden
bne op
pla ; ersten wert wieder hinten
sta farb+31 ; reinschieben
lda #00 ;geschwindigkeitszaehler auf null setzen
sta speed
:modify1 lda #130 ; naechsten rasterinterrupt bestimmen
sta 53248+18 ; ins rasterregister schreiben
jmp $febc ;sprung zum ende der interruptroutine
:speed b $00 ;geschwindigkeitszaehler fuer farbenscroll