home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1991 May / 64er_Magazin_91-05_1991_Markt__Technik_de.d64 / s.-pixel-fld.src < prev    next >
Text File  |  2022-10-26  |  6KB  |  390 lines

  1.  
  2.  
  3. ;Anwendung des $d011-Effektes:
  4.  
  5. ; Single-Pixel-FLD
  6.  
  7. ;(c)Copyright 1991 by LUBBER of PADUA
  8.  
  9.  
  10. ;Der Original-Zeichensatz muss ab
  11. ; $3000 liegen
  12.  
  13. ;^^^^ WICHTIG! ^^^^
  14.  
  15. ;Die ersten 5 normalen und die ersten
  16. ;5 reversen Zeichen duerfen NICHT
  17. ;benutzt sein ! Sonst werden sie fuer
  18. ;den Effekt zerstoert !
  19.  
  20. ;(Da dort die Screenzeilen abgelegt
  21. ; werden)
  22.  
  23.  
  24. ;Die Original-Screentabelle muss ab
  25. ;$2c00 liegen (Maximal 16 Zeilen hoch!)
  26.  
  27.  
  28. org $1000  ;Code nach $1000
  29.  
  30. lda #8     ;Aktuelle Farbe auf
  31. sta 646    ;orange=schwarz in Multicolor
  32.            ;setzen
  33. jsr $e544  ;Bildschirm loeschen
  34.            ;und Color-ram mit
  35.            ;aktueller Farbe fuellen
  36.  
  37. lda #$40
  38. sta hibyte1+2
  39. lda #$48
  40. sta hibyte2+2
  41. lda #$50
  42. sta hibyte3+2
  43. lda #$58           ;Highbytes fuer
  44. sta hibyte4+2      ;Umrechnungsroutine
  45. lda #$60           ;erneuern
  46. sta hibyte5+2
  47. lda #$68           ;Nur wichtig,wenn
  48. sta hibyte6+2      ;die Routine oefters
  49. lda #$70           ;von neuem gestartet
  50. sta hibyte7+2      ;werden soll,ohne
  51. lda #$78           ;dass man den Code
  52. sta hibyte8+2      ;neu reinladen muss.
  53.  
  54.  
  55. lda #$ff
  56. tax
  57. :fillff1
  58. sta $37f8,x
  59. inx            ;Das 255.Zeichen des
  60. cpx #8         ;Zeichensatzes wird mit
  61. bne fillff1    ;$ff-Bytes gefuellt
  62.  
  63. lda #$ff
  64. ldx #0
  65. :fillff2
  66. sta $2c00+600,x ;Die letzte Cursor-Zeile
  67. inx             ;des Original-Bildes
  68. cpx #40         ;wird mit $ff-Bytes
  69. bne fillff2     ;gefuellt
  70.  
  71. lda #0
  72. sta $fb
  73. lda #$30   ;Adresse des Zeichensatzes
  74. sta $fc    ;in die Register ($fb)
  75.  
  76.  
  77. ;Zuerst wird der Original-Zeichensatz
  78. ;fuer den Effect 'zurechtgeschoben'.
  79.  
  80. ldx #0
  81. ldy #0
  82. :charbegin
  83. lda ($fb),y
  84.  
  85. :hibyte1
  86. sta $4000,x   ;Dieser Zeichens. enthaelt
  87. iny           ;am Ende alle 1.Bytes
  88. lda ($fb),y   ;eines  einzelnen Zeichens
  89.  
  90. :hibyte2
  91. sta $4800,x    ;Dieser alle zweiten
  92. iny            ;Bytes
  93. lda ($fb),y
  94.  
  95. :hibyte3
  96. sta $5000,x    ;Dieser alle dritten
  97. iny
  98. lda ($fb),y
  99.  
  100. :hibyte4       ; . ..
  101. sta $5800,x
  102. iny
  103. lda ($fb),y
  104.  
  105. :hibyte5
  106. sta $6000,x   ;....
  107. iny
  108. lda ($fb),y
  109.  
  110. :hibyte6
  111. sta $6800,x
  112. iny
  113. lda ($fb),y
  114.  
  115. :hibyte7
  116. sta $7000,x
  117. iny
  118. lda ($fb),y
  119.  
  120. :hibyte8
  121. sta $7800,x   ;... und dieser alle
  122.               ;8.Bytes
  123.  
  124. iny           ;schon 256 Bytes (= 32
  125.               ;komplette Zeichen)
  126.  
  127. bne keinuebertrag1
  128.          ;nein ? dann keinuebertrag1
  129.          ;Original-
  130. inc $fc  ;Zeichensatz-Adressenhigh-byte
  131.          ;um 1 erhoehen
  132.  
  133. :keinuebertrag1
  134. txa
  135. clc         ;Zeiger der neuen Zeichens.
  136. adc #8      ; um 8
  137. tax         ;erhoehen
  138. bne notrag  ;da nur das 1.Byte der neuen
  139.             ;Zeichensaetze benutzt
  140.             ;werden
  141.  
  142. inc hibyte1+2  ;wenn x-reg. wieder auf 0
  143. inc hibyte2+2  ;dann high-bytes erhoehen.
  144. inc hibyte3+2
  145. inc hibyte4+2
  146. inc hibyte5+2
  147. inc hibyte6+2
  148. inc hibyte7+2
  149. inc hibyte8+2
  150.  
  151. :notrag
  152. lda $fc
  153. cmp #$38     ;schon ganzer Original-
  154.              ;Zeichensatz bearbeitet ???
  155.  
  156. bne charbegin  ;nein ?? dann  charbegin
  157.  
  158.  
  159. ;Jetzt alle Zeilen der Original-
  160. ;tabelle in die verschiedenen
  161. ;Screens verschieben
  162.  
  163. ldx #0
  164. :transfer
  165. lda $2c00,x
  166. sta $4000,x
  167. lda $2c00+40,x
  168. sta $4400,x
  169. lda $2c00+80,x
  170. sta $4800,x
  171. lda $2c00+120,x
  172. sta $4c00,x
  173. lda $2c00+160,x
  174. sta $5000,x
  175. lda $2c00+200,x
  176. sta $5400,x
  177. lda $2c00+240,x
  178. sta $5800,x
  179. lda $2c00+280,x
  180. sta $5c00,x
  181. lda $2c00+320,x
  182. sta $6000,x
  183. lda $2c00+360,x
  184. sta $6400,x
  185. lda $2c00+400,x
  186. sta $6800,x
  187. lda $2c00+440,x
  188. sta $6c00,x
  189. lda $2c00+480,x
  190. sta $7000,x
  191. lda $2c00+520,x
  192. sta $7400,x
  193. lda $2c00+560,x
  194. sta $7800,x
  195. lda $2c00+600,x      ;16 zeilen
  196. sta $7c00,x          ;wurden verschoben
  197. inx
  198. cpx #40
  199. bne transfer
  200.  
  201. sei
  202. lda  #$7f
  203. sta  $dc0d
  204. lda  #$00
  205. sta  $dc0e
  206. lda  #$f1    ;Interrupt-Register
  207. sta  $d01a
  208. lda  #50     ;auf Rasterinterrupt
  209. sta  $d012
  210. lda  #$1b    ;vorbereiten
  211. sta  $d011   ;bei Rasterzeile 50
  212. lda  #<irqneu
  213. sta  $0314    ;IRQ-Pointer setzen
  214. lda  #>irqneu
  215. sta  $0315
  216.  
  217. lda #24
  218. sta $d016   ;Multicolor einschalten
  219.  
  220. lda #0
  221. sta $d020   ;Rahmenfarbe
  222.             ;auf Schwarz
  223. lda #6
  224. sta $d021   ;Hintergrundfarbe
  225.             ;auf Blau
  226. lda #14
  227. sta $d022   ;Mutlicolorfarben
  228. lda #15     ;auf hellblau und hell-
  229. sta $d023   ;grau setzen
  230.  
  231.  
  232. cli
  233.  
  234. :back
  235.  
  236.     jmp back  ;Endlosschleife
  237.  
  238. :irqneu
  239. bit 0
  240. bit 0    ;Wartezeit
  241.  
  242. lda  #150
  243. sta  $dd00     ;Auf die Bank ab $4000
  244.                ;umschalten
  245.  
  246. ldy  #0
  247. :loop
  248. lda  #$12         ;nacheinander
  249. sta  $d011        ;die werte
  250. lda  chartab,y    ;$12,$13,$14,$15
  251.                   ;$16,$17,$10,$11
  252. sta  $d018        ;setzen um den FLD-
  253.                   ;effekt zu erzielen
  254. iny
  255. nop               ;Rasterzeile austimen
  256. nop
  257. lda  #$13
  258. sta  $d011
  259. lda  chartab,y   ;nacheinander die $d018
  260. sta  $d018       ;werte aus der Tabelle
  261. iny              ;holen
  262. nop
  263. nop
  264. lda  #$14
  265. sta  $d011
  266. lda  chartab,y
  267. sta  $d018
  268. iny
  269. nop
  270. nop
  271. lda  #$15
  272. sta  $d011
  273. lda  chartab,y
  274. sta  $d018
  275. iny
  276. nop
  277. nop
  278. lda  #$16
  279. sta  $d011
  280. lda  chartab,y
  281. sta  $d018
  282. iny
  283. nop
  284. nop
  285. lda  #$17
  286. sta  $d011
  287. lda  chartab,y
  288. sta  $d018
  289. iny
  290. nop
  291. nop
  292. lda  #$10
  293. sta  $d011
  294. lda  chartab,y
  295. sta  $d018
  296. iny
  297. bit 0
  298. lda  #$11
  299. sta  $d011
  300. lda  chartab,y
  301. sta  $d018
  302.  
  303. iny
  304. cpy  #136   ;Schon der 136.wert aus der
  305.             ;Tabelle gelesen ???
  306.            ;(Der FLD-Bereich ist dann
  307.            ;136/8=17 Cursor-zeilen hoch)
  308.  
  309. bne  loop   ;nein ?? dann loop
  310.  
  311. lda #$72   ;Unteren Teil des Bildschirms
  312. sta $d011  ;unsichtbar machen
  313.  
  314. lda #$fe
  315. ldx #0
  316. :loeschtab      ;$d018-Tabelle mit
  317. sta chartab,x   ;$fe-bytes fuellen.
  318. inx             ;Sie simulieren
  319. cpx #136        ;ein FLD mit ge-
  320. bne loeschtab   ;loeschtem $3fff
  321.  
  322. :sinzeiger
  323. ldx #0
  324.  
  325. ldy #0
  326. :setpixels
  327. lda #0         ;pixelnummer
  328. asl            ;mal 2
  329. sta chartab,y  ;in tabelle setzen
  330. cmp #$90       ;schon 72 pixel ???
  331.                ;72/8=9 Cursor-Zeilen
  332.                ;(Hoehe des Original
  333.                ; Bildes)
  334. beq fertig     ;ja ?? dann fertig
  335.  
  336. iny            ;zeiger zum setzen
  337. tya            ;der chartab erhoehen
  338. clc            ;und mit sinuswert
  339. adc sinus,x    ;addieren
  340. tay
  341. inx
  342. inc setpixels+1  ;pixelnummer erhoehn
  343.  
  344. jmp setpixels  ;wiederholen
  345.  
  346. :fertig
  347. lda #0
  348. sta setpixels+1  ;anfangspixel wieder
  349.                  ;auf 0
  350.  
  351. inc sinzeiger+1  ;sinuszeiger erhoehen
  352. lda sinzeiger+1
  353. cmp #100         ;schon tabelle durchge-
  354. bne keinsinend   ;laufen ????
  355.  
  356. lda #0           ;ja ??
  357. sta sinzeiger+1  ;dann sinuszeiger auf 0
  358.  
  359. :keinsinend
  360. lda #1
  361. sta $d019
  362. jmp $febc     ;Ende der IRQ-Routine
  363.  
  364.  
  365. :chartab
  366. s 136    ;Speicher mit 136 $00-bytes
  367.          ;fuellen
  368.  
  369. :sinus   ;Sinustabelle fuer
  370.          ;den 'kuenstlichen' FLD
  371.  
  372. s 70    ;70 $00-Bytes
  373.  
  374. ; jetzt kommen die Abstaende zwischen
  375. ; den Pixelzeilen
  376.  
  377. b 1,1,2,2,3,3,4,4,4,4,4,4,4,4,4,3,3,2,2,1,1
  378.  
  379. s 80   ;80 $00-Bytes
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.