home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1992 July / 64er_Magazin_92-07_1992-12-02_Markt__Technik_de.d64 / escos.src (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  8KB  |  230 lines

  1. 1000 rem open1,8,1,"o:escos.obj"
  2. 1020 sys 9*4096
  3. 1040 ;
  4. 1060 .opt p,oo
  5. 1080 ;
  6. 1100 *= $8000
  7. 1120 ;
  8. 1140 ; **********************************************************
  9. 1160 ; * expanded sprites controlled screen by m. sachs in 1992 *
  10. 1180 ; **********************************************************
  11. 1200 ;
  12. 1220 ; benutzte vektoren und adressen
  13. 1240 ;
  14. 1260 nmivek   = $fffa ; nmi-vektor
  15. 1280 irqvek   = $fffe ; irq-vektor
  16. 1300 icr      = $dc0e ; interrupt control register der cia1
  17. 1320 cra      = $dc0d ; control register a der cia1
  18. 1340 vic      = $d000 ; basisadresse des vic
  19. 1360 vicpos   = $dd00 ; adressbereich des vic wird hier festgelegt
  20. 1380 spoint01 = $c7f8 ; sprite-pointer fuer die ersten acht sprites
  21. 1400 spoint02 = $cbf8 ; sprite-pointer fuer die zweiten acht sprites
  22. 1420 spoint03 = $cff8 ; sprite-pointer fuer die dritten acht sprites
  23. 1440 spoint04 = $d3f8 ; sprite-pointer fuer die vierten acht sprites
  24. 1460 spoint05 = $d7f8 ; sprite-pointer fuer die fuenften acht sprites
  25. 1480 spoint06 = $dbf8 ; sprite-pointer fuer die sechsten acht sprites
  26. 1500 streg1   = $d011 ; steuerregister 1 des vic
  27. 1520 streg2   = $d016 ; steuerregister 2 des vic (scroll register)
  28. 1540 irr      = $d019 ; interrupt request register
  29. 1560 exterior = $d021 ; exterior color (rahmenfarbe)
  30. 1580 basis    = $d018 ; basisadresse von zeichengenerator und video ram
  31. 1600 cpuport  = $01   ; hier wird festgelegt ob rom oder ram aktiv ist
  32. 1620 kotab1   = $3000 ; tabelle mit zeigern auf vic-adressen
  33. 1640 kotab2   = $3100 ; tabelle mit werten fuer vic-adressen
  34. 1660 block    = $e000 ; sprite-block $80
  35. 1680 ;
  36. 1700 ; ***********************************************************************
  37. 1720 ;
  38. 1740 ; generierung der hilfstabellen kotab1 und kotab2
  39. 1760 ;
  40. 1780 :        ldy #$00
  41. 1800 :        tya
  42. 1820 clear    sta kotab1,y
  43. 1840 :        sta kotab2,y
  44. 1860 :        iny
  45. 1880 :        bne clear
  46. 1900 :        clc
  47. 1920 :        ldx #$06
  48. 1940 :        ldy #$00
  49. 1960 loop2    lda #$01
  50. 1980 loop1    iny
  51. 2000 :        sta kotab1,y
  52. 2020 :        pha
  53. 2040 :        lda #$2a
  54. 2060 :        sta kotab2,y
  55. 2080 :        pla
  56. 2100 :        adc #$02
  57. 2120 :        cmp #$11
  58. 2140 :        bne loop1
  59. 2160 :        tya
  60. 2180 :        adc #$1f
  61. 2200 :        tay
  62. 2220 :        lda #$18
  63. 2240 :        sta kotab1,y
  64. 2260 :        lda #$10
  65. 2280 :        sta kotab2,y
  66. 2300 :        iny
  67. 2320 :        iny
  68. 2340 :        dex
  69. 2360 :        bne loop2
  70. 2380 :        lda #$11
  71. 2400 :        sta kotab1+$1e
  72. 2420 :        sta kotab1+$e4
  73. 2440 :        lda #$10
  74. 2460 :        sta kotab2+$1e
  75. 2480 :        lda #$88
  76. 2500 :        sta kotab2+$e4
  77. 2520 ;
  78. 2540 ; interruptroutine vorbereiten
  79. 2560 ;
  80. 2580 :        sei            ; interrupt sperren
  81. 2600 :        lda #$35       ; kernal ram einblenden
  82. 2620 :        sta cpuport
  83. 2640 :        ldx #<newnmi   ; nmi-vektor auf newnmi 'verbiegen'
  84. 2660 :        ldy #>newnmi   ; dient nur dazu um die restore-taste
  85. 2680 :        stx nmivek     ; zu neutralisieren
  86. 2700 :        sty nmivek+1
  87. 2720 :        ldx #<newirq   ; irq-vektor auf newirq 'verbiegen'
  88. 2740 :        ldy #>newirq
  89. 2760 :        stx irqvek
  90. 2780 :        sty irqvek+1
  91. 2800 :        lda #$00
  92. 2820 :        sta icr
  93. 2840 :        sta cra        ; interrupt durch timer verhindern
  94. 2860 :        sta vicpos     ; adressbereich des vic nach $c000-$ffff
  95. 2880 ;
  96. 2900 ; vic mit entsprechenden werten versorgen
  97. 2920 ;
  98. 2940 :        ldx #$2e
  99. 2960 vicset   lda vicvalue,x
  100. 2980 :        sta vic,x
  101. 3000 :        dex
  102. 3020 :        bpl vicset
  103. 3040 ;
  104. 3060 ; spritepointer setzen
  105. 3080 ;
  106. 3100 :        ldy #$07
  107. 3120 setpoint lda postab01,y
  108. 3140 :        sta spoint01,y
  109. 3160 :        lda postab02,y
  110. 3180 :        sta spoint02,y
  111. 3200 :        lda postab03,y
  112. 3220 :        sta spoint03,y
  113. 3240 :        dec cpuport    ; i/o bereich ausblenden
  114. 3260 :        lda postab04,y ; da die spritepointer
  115. 3280 :        sta spoint04,y ; spoint04-spoint06
  116. 3300 :        lda postab05,y ; in diesem bereich liegen
  117. 3320 :        sta spoint05,y
  118. 3340 :        lda postab06,y
  119. 3360 :        sta spoint06,y
  120. 3380 :        inc cpuport    ; i/o bereich wieder einblenden
  121. 3400 :        dey
  122. 3420 :        bpl setpoint
  123. 3440 ;
  124. 3460 ; spritedaten nach $e000 kopieren (block $80)
  125. 3480 ;
  126. 3500 :        ldy #$3f
  127. 3520 label5   lda sprite,y
  128. 3540 :        sta block,y
  129. 3560 :        dey
  130. 3580 :        bpl label5
  131. 3600 ;
  132. 3620 :        cli            ; interrupt wieder freigeben
  133. 3640 :        ldy #$00       ; und in endlosschleife springen
  134. 3660 :        ldx #$00       ; um das timing des interruptprogrammes
  135. 3680 endless  jmp endless    ; nicht zu stoeren
  136. 3700 ;
  137. 3720 ; ***********************************************************************
  138. 3740 ; ***********************************************************************
  139. 3760 ;
  140. 3780 ; hier beginnt das eigentliche interruptprogramm
  141. 3800 ;
  142. 3820 newirq   bit $00        ; timing
  143. 3840 :        nop            ; timing
  144. 3860 next     nop            ; timing
  145. 3880 :        clc            ; timing
  146. 3900 :        bit $00        ; timing
  147. 3920 :        ldx kotab1,y   ; vic-adressen holen
  148. 3940 :        stx execute+1  ; und abspeichern
  149. 3960 :        lda vic,x      ; alte vic-werte holen
  150. 3980 :        adc kotab2,y   ; und neue dazu addieren
  151. 4000 :        dec streg2     ; scroll-register schalten
  152. 4020 execute  sta vic        ; neue werte abspeichern
  153. 4040 :        inc streg2     ; scroll-register schalten
  154. 4060 :        nop            ; timing
  155. 4080 :        iny            ; schon alle werte durch
  156. 4100 :        bne next       ; nein, dann zurueck
  157. 4120 ;
  158. 4140 :        ldx #$01
  159. 4160 :        lda #$13       ; sprite y-koordinaten wieder
  160. 4180 oldpos   sta vic,x      ; auf anfangswert setzen
  161. 4200 :        inx
  162. 4220 :        inx
  163. 4240 :        cpx #$11       ; schon alle sprites
  164. 4260 :        bne oldpos     ; nein, dann zurueck
  165. 4280 :        lda #$01
  166. 4300 :        sta irr        ; interrupt loeschen
  167. 4320 :        lda #$08
  168. 4340 :        sta streg1     ; up-down border einschalten
  169. 4360 :        lda #$10
  170. 4380 :        sta basis      ; basisadresse wieder auf anfangswert
  171. 4400 :        sta exterior   ; rahmenfarbe auf schwarz
  172. 4420 newnmi   rti            ; return from interrupt
  173. 4440 ;
  174. 4460 ; ***********************************************************************
  175. 4480 ; ***********************************************************************
  176. 4500 ;
  177. 4520 ; ab hier folgen die benutzten werte
  178. 4540 ;
  179. 4560 vicvalue .byte $f0,$13,$28,$13
  180. 4580 :        .byte $58,$13,$88,$13 ; sprite koordinaten
  181. 4600 :        .byte $b8,$13,$e8,$13
  182. 4620 :        .byte $18,$13,$48,$13
  183. 4640 :        .byte $c1             ; msb fuer x-koordinaten der sprites
  184. 4660 :        .byte $08             ; steuerregister 1
  185. 4680 :        .byte $14             ; interrupt bei rasterzeile $14
  186. 4700 :        .byte $00             ; x-wert (lightpenstrobe)
  187. 4720 :        .byte $00             ; dasselbe fuer y-wert (hier nicht benutzt)
  188. 4740 :        .byte $ff             ; alle sprites einschalten
  189. 4760 :        .byte $08             ; steuerregister 2 (up-down border)
  190. 4780 :        .byte $ff             ; spriteexpand in x-richtung
  191. 4800 :        .byte $10             ; basisadresse von zeicheng. und video ram
  192. 4820 :        .byte $00             ; interrupt request register
  193. 4840 :        .byte $01             ; interrupt mask register
  194. 4860 :        .byte $00             ; sprite-background-prioritaet
  195. 4880 :        .byte $ff             ; multicolormode fuer sprites
  196. 4900 :        .byte $ff             ; spriteexpand in y-richtung
  197. 4920 :        .byte $00             ; sprite-sprite-kollision
  198. 4940 :        .byte $00             ; sprite-background-kollision
  199. 4960 :        .byte $00             ; exteriorcolor (rahmenfarbe)
  200. 4980 :        .byte $00             ; backgroundcolor (hintergrundfarbe)
  201. 5000 :        .byte $00             ; backgroundcolor 1
  202. 5020 :        .byte $00             ; backgroundcolor 2
  203. 5040 :        .byte $00             ; backgroundcolor 3
  204. 5060 :        .byte $0a             ; spritemulticolor 0
  205. 5080 :        .byte $0e             ; spritemulticolor 1
  206. 5100 :        .byte $07,$07,$07,$07 ; color sprite 0
  207. 5120 :        .byte $07,$07,$07,$07 ; bis sprite 7
  208. 5140 ;
  209. 5160 ; werte fuer die spritepointer
  210. 5180 ;
  211. 5200 postab01 .byte $80,$80,$80,$80,$80,$80,$80,$80
  212. 5220 postab02 .byte $80,$80,$80,$80,$80,$80,$80,$80
  213. 5240 postab03 .byte $80,$80,$80,$80,$80,$80,$80,$80
  214. 5260 postab04 .byte $80,$80,$80,$80,$80,$80,$80,$80
  215. 5280 postab05 .byte $80,$80,$80,$80,$80,$80,$80,$80
  216. 5300 postab06 .byte $80,$80,$80,$80,$80,$80,$80,$80
  217. 5320 ;
  218. 5340 ; daten fuer sprite
  219. 5360 ;
  220. 5380 sprite   .byte $00,$00,$00,$27,$6d,$ec,$39,$db
  221. 5400 :        .byte $b8,$1e,$76,$64,$37,$99,$dc,$2e
  222. 5420 :        .byte $66,$74,$19,$9d,$98,$26,$77,$6c
  223. 5440 :        .byte $39,$99,$98,$27,$6e,$e4,$39,$db
  224. 5460 :        .byte $9c,$1e,$66,$74,$37,$9d,$ec,$1e
  225. 5480 :        .byte $e7,$b8,$39,$99,$ec,$27,$76,$74
  226. 5500 :        .byte $19,$dd,$98,$2e,$76,$ec,$1b,$9b
  227. 5520 :        .byte $74,$36,$6d,$dc,$00,$00,$00
  228. 5540 :        .end
  229. 5560 rem close1
  230.