1000 REM OPEN1,8,1,"O:ESCOS.OBJ" 1020 SYS 9*4096 1040 ; 1060 .OPT P,OO 1080 ; 1100 *= $8000 1120 ; 1140 ; ********************************************************** 1160 ; * EXPANDED SPRITES CONTROLLED SCREEN BY M. SACHS IN 1992 * 1180 ; ********************************************************** 1200 ; 1220 ; BENUTZTE VEKTOREN UND ADRESSEN 1240 ; 1260 NMIVEK = $FFFA ; NMI-VEKTOR 1280 IRQVEK = $FFFE ; IRQ-VEKTOR 1300 ICR = $DC0E ; INTERRUPT CONTROL REGISTER DER CIA1 1320 CRA = $DC0D ; CONTROL REGISTER A DER CIA1 1340 VIC = $D000 ; BASISADRESSE DES VIC 1360 VICPOS = $DD00 ; ADRESSBEREICH DES VIC WIRD HIER FESTGELEGT 1380 SPOINT01 = $C7F8 ; SPRITE-POINTER FUER DIE ERSTEN ACHT SPRITES 1400 SPOINT02 = $CBF8 ; SPRITE-POINTER FUER DIE ZWEITEN ACHT SPRITES 1420 SPOINT03 = $CFF8 ; SPRITE-POINTER FUER DIE DRITTEN ACHT SPRITES 1440 SPOINT04 = $D3F8 ; SPRITE-POINTER FUER DIE VIERTEN ACHT SPRITES 1460 SPOINT05 = $D7F8 ; SPRITE-POINTER FUER DIE FUENFTEN ACHT SPRITES 1480 SPOINT06 = $DBF8 ; SPRITE-POINTER FUER DIE SECHSTEN ACHT SPRITES 1500 STREG1 = $D011 ; STEUERREGISTER 1 DES VIC 1520 STREG2 = $D016 ; STEUERREGISTER 2 DES VIC (SCROLL REGISTER) 1540 IRR = $D019 ; INTERRUPT REQUEST REGISTER 1560 EXTERIOR = $D021 ; EXTERIOR COLOR (RAHMENFARBE) 1580 BASIS = $D018 ; BASISADRESSE VON ZEICHENGENERATOR UND VIDEO RAM 1600 CPUPORT = $01 ; HIER WIRD FESTGELEGT OB ROM ODER RAM AKTIV IST 1620 KOTAB1 = $3000 ; TABELLE MIT ZEIGERN AUF VIC-ADRESSEN 1640 KOTAB2 = $3100 ; TABELLE MIT WERTEN FUER VIC-ADRESSEN 1660 BLOCK = $E000 ; SPRITE-BLOCK $80 1680 ; 1700 ; *********************************************************************** 1720 ; 1740 ; GENERIERUNG DER HILFSTABELLEN KOTAB1 UND KOTAB2 1760 ; 1780 : LDY #$00 1800 : TYA 1820 CLEAR STA KOTAB1,Y 1840 : STA KOTAB2,Y 1860 : INY 1880 : BNE CLEAR 1900 : CLC 1920 : LDX #$06 1940 : LDY #$00 1960 LOOP2 LDA #$01 1980 LOOP1 INY 2000 : STA KOTAB1,Y 2020 : PHA 2040 : LDA #$2A 2060 : STA KOTAB2,Y 2080 : PLA 2100 : ADC #$02 2120 : CMP #$11 2140 : BNE LOOP1 2160 : TYA 2180 : ADC #$1F 2200 : TAY 2220 : LDA #$18 2240 : STA KOTAB1,Y 2260 : LDA #$10 2280 : STA KOTAB2,Y 2300 : INY 2320 : INY 2340 : DEX 2360 : BNE LOOP2 2380 : LDA #$11 2400 : STA KOTAB1+$1E 2420 : STA KOTAB1+$E4 2440 : LDA #$10 2460 : STA KOTAB2+$1E 2480 : LDA #$88 2500 : STA KOTAB2+$E4 2520 ; 2540 ; INTERRUPTROUTINE VORBEREITEN 2560 ; 2580 : SEI ; INTERRUPT SPERREN 2600 : LDA #$35 ; KERNAL RAM EINBLENDEN 2620 : STA CPUPORT 2640 : LDX #NEWNMI ; DIENT NUR DAZU UM DIE RESTORE-TASTE 2680 : STX NMIVEK ; ZU NEUTRALISIEREN 2700 : STY NMIVEK+1 2720 : LDX #NEWIRQ 2760 : STX IRQVEK 2780 : STY IRQVEK+1 2800 : LDA #$00 2820 : STA ICR 2840 : STA CRA ; INTERRUPT DURCH TIMER VERHINDERN 2860 : STA VICPOS ; ADRESSBEREICH DES VIC NACH $C000-$FFFF 2880 ; 2900 ; VIC MIT ENTSPRECHENDEN WERTEN VERSORGEN 2920 ; 2940 : LDX #$2E 2960 VICSET LDA VICVALUE,X 2980 : STA VIC,X 3000 : DEX 3020 : BPL VICSET 3040 ; 3060 ; SPRITEPOINTER SETZEN 3080 ; 3100 : LDY #$07 3120 SETPOINT LDA POSTAB01,Y 3140 : STA SPOINT01,Y 3160 : LDA POSTAB02,Y 3180 : STA SPOINT02,Y 3200 : LDA POSTAB03,Y 3220 : STA SPOINT03,Y 3240 : DEC CPUPORT ; I/O BEREICH AUSBLENDEN 3260 : LDA POSTAB04,Y ; DA DIE SPRITEPOINTER 3280 : STA SPOINT04,Y ; SPOINT04-SPOINT06 3300 : LDA POSTAB05,Y ; IN DIESEM BEREICH LIEGEN 3320 : STA SPOINT05,Y 3340 : LDA POSTAB06,Y 3360 : STA SPOINT06,Y 3380 : INC CPUPORT ; I/O BEREICH WIEDER EINBLENDEN 3400 : DEY 3420 : BPL SETPOINT 3440 ; 3460 ; SPRITEDATEN NACH $E000 KOPIEREN (BLOCK $80) 3480 ; 3500 : LDY #$3F 3520 LABEL5 LDA SPRITE,Y 3540 : STA BLOCK,Y 3560 : DEY 3580 : BPL LABEL5 3600 ; 3620 : CLI ; INTERRUPT WIEDER FREIGEBEN 3640 : LDY #$00 ; UND IN ENDLOSSCHLEIFE SPRINGEN 3660 : LDX #$00 ; UM DAS TIMING DES INTERRUPTPROGRAMMES 3680 ENDLESS JMP ENDLESS ; NICHT ZU STOEREN 3700 ; 3720 ; *********************************************************************** 3740 ; *********************************************************************** 3760 ; 3780 ; HIER BEGINNT DAS EIGENTLICHE INTERRUPTPROGRAMM 3800 ; 3820 NEWIRQ BIT $00 ; TIMING 3840 : NOP ; TIMING 3860 NEXT NOP ; TIMING 3880 : CLC ; TIMING 3900 : BIT $00 ; TIMING 3920 : LDX KOTAB1,Y ; VIC-ADRESSEN HOLEN 3940 : STX EXECUTE+1 ; UND ABSPEICHERN 3960 : LDA VIC,X ; ALTE VIC-WERTE HOLEN 3980 : ADC KOTAB2,Y ; UND NEUE DAZU ADDIEREN 4000 : DEC STREG2 ; SCROLL-REGISTER SCHALTEN 4020 EXECUTE STA VIC ; NEUE WERTE ABSPEICHERN 4040 : INC STREG2 ; SCROLL-REGISTER SCHALTEN 4060 : NOP ; TIMING 4080 : INY ; SCHON ALLE WERTE DURCH 4100 : BNE NEXT ; NEIN, DANN ZURUECK 4120 ; 4140 : LDX #$01 4160 : LDA #$13 ; SPRITE Y-KOORDINATEN WIEDER 4180 OLDPOS STA VIC,X ; AUF ANFANGSWERT SETZEN 4200 : INX 4220 : INX 4240 : CPX #$11 ; SCHON ALLE SPRITES 4260 : BNE OLDPOS ; NEIN, DANN ZURUECK 4280 : LDA #$01 4300 : STA IRR ; INTERRUPT LOESCHEN 4320 : LDA #$08 4340 : STA STREG1 ; UP-DOWN BORDER EINSCHALTEN 4360 : LDA #$10 4380 : STA BASIS ; BASISADRESSE WIEDER AUF ANFANGSWERT 4400 : STA EXTERIOR ; RAHMENFARBE AUF SCHWARZ 4420 NEWNMI RTI ; RETURN FROM INTERRUPT 4440 ; 4460 ; *********************************************************************** 4480 ; *********************************************************************** 4500 ; 4520 ; AB HIER FOLGEN DIE BENUTZTEN WERTE 4540 ; 4560 VICVALUE .BYTE $F0,$13,$28,$13 4580 : .BYTE $58,$13,$88,$13 ; SPRITE KOORDINATEN 4600 : .BYTE $B8,$13,$E8,$13 4620 : .BYTE $18,$13,$48,$13 4640 : .BYTE $C1 ; MSB FUER X-KOORDINATEN DER SPRITES 4660 : .BYTE $08 ; STEUERREGISTER 1 4680 : .BYTE $14 ; INTERRUPT BEI RASTERZEILE $14 4700 : .BYTE $00 ; X-WERT (LIGHTPENSTROBE) 4720 : .BYTE $00 ; DASSELBE FUER Y-WERT (HIER NICHT BENUTZT) 4740 : .BYTE $FF ; ALLE SPRITES EINSCHALTEN 4760 : .BYTE $08 ; STEUERREGISTER 2 (UP-DOWN BORDER) 4780 : .BYTE $FF ; SPRITEEXPAND IN X-RICHTUNG 4800 : .BYTE $10 ; BASISADRESSE VON ZEICHENG. UND VIDEO RAM 4820 : .BYTE $00 ; INTERRUPT REQUEST REGISTER 4840 : .BYTE $01 ; INTERRUPT MASK REGISTER 4860 : .BYTE $00 ; SPRITE-BACKGROUND-PRIORITAET 4880 : .BYTE $FF ; MULTICOLORMODE FUER SPRITES 4900 : .BYTE $FF ; SPRITEEXPAND IN Y-RICHTUNG 4920 : .BYTE $00 ; SPRITE-SPRITE-KOLLISION 4940 : .BYTE $00 ; SPRITE-BACKGROUND-KOLLISION 4960 : .BYTE $00 ; EXTERIORCOLOR (RAHMENFARBE) 4980 : .BYTE $00 ; BACKGROUNDCOLOR (HINTERGRUNDFARBE) 5000 : .BYTE $00 ; BACKGROUNDCOLOR 1 5020 : .BYTE $00 ; BACKGROUNDCOLOR 2 5040 : .BYTE $00 ; BACKGROUNDCOLOR 3 5060 : .BYTE $0A ; SPRITEMULTICOLOR 0 5080 : .BYTE $0E ; SPRITEMULTICOLOR 1 5100 : .BYTE $07,$07,$07,$07 ; COLOR SPRITE 0 5120 : .BYTE $07,$07,$07,$07 ; BIS SPRITE 7 5140 ; 5160 ; WERTE FUER DIE SPRITEPOINTER 5180 ; 5200 POSTAB01 .BYTE $80,$80,$80,$80,$80,$80,$80,$80 5220 POSTAB02 .BYTE $80,$80,$80,$80,$80,$80,$80,$80 5240 POSTAB03 .BYTE $80,$80,$80,$80,$80,$80,$80,$80 5260 POSTAB04 .BYTE $80,$80,$80,$80,$80,$80,$80,$80 5280 POSTAB05 .BYTE $80,$80,$80,$80,$80,$80,$80,$80 5300 POSTAB06 .BYTE $80,$80,$80,$80,$80,$80,$80,$80 5320 ; 5340 ; DATEN FUER SPRITE 5360 ; 5380 SPRITE .BYTE $00,$00,$00,$27,$6D,$EC,$39,$DB 5400 : .BYTE $B8,$1E,$76,$64,$37,$99,$DC,$2E 5420 : .BYTE $66,$74,$19,$9D,$98,$26,$77,$6C 5440 : .BYTE $39,$99,$98,$27,$6E,$E4,$39,$DB 5460 : .BYTE $9C,$1E,$66,$74,$37,$9D,$EC,$1E 5480 : .BYTE $E7,$B8,$39,$99,$EC,$27,$76,$74 5500 : .BYTE $19,$DD,$98,$2E,$76,$EC,$1B,$9B 5520 : .BYTE $74,$36,$6D,$DC,$00,$00,$00 5540 : .END 5560 REM CLOSE1