Hallo,
ich arbeite gerade den IRQ-Kurs von Ivo Herzeg aus
der Magic Disc durch.
Siehe Thread
http://www.forum64.de/wbb2/thread.php?threadid=10701
Bin auf der Seite 135 angelangt, wo er das VSP (Vertikale scrollen)
erklärt.
Nur versteh ich das nicht so ganz. Er schreibt, dass durch ein NOP mehr
(siehe code Zeile 131)
aus der FLD-Routine eine VSP-Routine entsteht.
Angeblich wird in dieser Zeit "die interne Adresse auf das Video-RAM um 40
Zeichen erhöht"
Kann mir das mal einer erklären?
Warum erhöht sich das ganze um nochmal 40 Zeichen,
wenn in der FLD-Routine jeweils eine Rasterzeile länger gewartet wird?
Dann komm der NOP doch gar nicht mehr zum tragen!?
Hier mal der Quellcode:
Code
- !to "fld", cbm
- *= $0800
- !byte $00,$0c,$08,$0a,$00,$9e,$32,$30,$36,$34,$00,$00,$00,$00
- *=$0810
- init SEI
- LDA #$7F
- STA $DC0D
- BIT $DC0D
- LDA #$F8
- STA $D012
- LDA $D011
- AND #$7F
- STA $D011
- LDA #$01
- STA $D01A
- LDX #<irq1
- LDY #>irq1
- STX $FFFE
- STY $FFFF
- LDA #$00
- STA $02
- LDA #$00
- STA $3FFF
- JSR fill
- LDA #$35
- STA $01
- CLI
- LDA #$7F
- STA $DC00
- in LDA $DC01
- CMP #$EF
- BNE in
- SEI
- LDA #$37
- STA $01
- JMP $FCE2
- fill LDX #$00
- loop LDA $1400,X
- STA $0400,X
- LDA $1500,X
- STA $0500,X
- LDA $1600,X
- STA $0600,X
- LDA $1700,X
- STA $0700,X
- LDA #$01
- STA $D800,X
- STA $D900,X
- STA $DA00,X
- STA $DB00,X
- INX
- BNE loop
- RTS
- ;--------------------------------------------------
- *=$1100
- irq2
- PHA ; Raster bei $2d
- TXA
- PHA
- TYA
- PHA
- DEC $D019
- INC $D012
- LDX #<irq3
- LDY #>irq3
- STX $FFFE
- STY $FFFF
- CLI
- wait NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- JMP wait
- ;--------------------------------------------------
- irq3 PLA ; Raster bei $2e
- PLA
- PLA
- DEC $D019
- LDA #$F8
- STA $D012
- LDX #<irq1
- LDY #>irq1
- STX $FFFE
- STY $FFFF
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- LDA $D012
- CMP $D012
- BNE nextrow
- nextrow LDA #$18 ; Raster bei $2f -> jetzt stabil !!!
- STA $D011
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- nop ; -> VSP-Effekt
- LDA $02
- BEQ dir1
- LDX #$00
- dir2 LDA data1,X
- ORA #$18
- STA $D011
- LDA data2,X
- STA $D020
- STA $D021
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- LDA data3,X
- STA $D020
- STA $D021
- NOP
- NOP
- BIT $EA
- INX
- CPX $02
- BCC dir2
- dir1 NOP
- NOP
- NOP
- NOP
- NOP
- LDA #$0E
- STA $D020
- LDA #$06
- STA $D021
- PLA
- TAY
- PLA
- TAX
- PLA
- RTI
- ;--------------------------------------------------
- *=$1300
- irq1 PHA ; Raster ist in $f8
- TXA
- PHA
- TYA
- PHA
- LDA #$10
- STA $D011
- LDA #$2d
- STA $D012
- DEC $D019
- LDX #<irq2
- LDY #>irq2
- STX $FFFE
- STY $FFFF
- JSR joy
- PLA
- TAY
- PLA
- TAX
- PLA
- RTI
- joy LDA $DC00
- LSR
- BCS joy1
- LDA $02
- BEQ leave
- DEC $02
- RTS
- joy1 LSR
- BCS leave
- LDA $02
- CMP #$1A
- BEQ leave
- INC $02
- leave RTS
- ;--------------------------------------------------
- *=$1400
- data1 !byte $01, $02, $03, $04, $05, $06, $07, $00
- !byte $01, $02, $03, $04, $05, $06, $07, $00
- !byte $01, $02, $03, $04, $05, $06, $07, $00
- !byte $01, $02, $03, $04, $05, $06, $07, $00
- !byte $01, $02, $03, $04, $05, $06, $07, $00
- *=$1430
- data2 !byte $06, $0e, $03, $0d, $01, $0d, $03, $0e
- !byte $06, $00, $06, $0e, $03, $0d, $01, $0d
- !byte $03, $0e, $06, $00, $06, $0e, $03, $0d
- !byte $01, $0d, $03, $0e, $06, $00, $06, $0e
- !byte $03, $0d, $01, $0d, $03, $0e, $06, $00
- *=$1460
- data3 !byte $09, $02, $08, $0a, $07, $0a, $08, $02
- !byte $09, $00, $09, $02, $08, $0a, $07, $0a
- !byte $08, $02, $09, $00, $09, $02, $08, $0a
- !byte $07, $0a, $08, $02, $09, $00, $09, $02
- !byte $08, $0a, $07, $0a, $08, $02, $09, $00