home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
92xx
/
9207.d64
/
escos.src
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-03-30
|
8KB
|
230 lines
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 ; NMI-VEKTOR AUF NEWNMI 'VERBIEGEN'
2660 : LDY #>NEWNMI ; DIENT NUR DAZU UM DIE RESTORE-TASTE
2680 : STX NMIVEK ; ZU NEUTRALISIEREN
2700 : STY NMIVEK+1
2720 : LDX #<NEWIRQ ; IRQ-VEKTOR AUF NEWIRQ 'VERBIEGEN'
2740 : LDY #>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