home *** CD-ROM | disk | FTP | other *** search
- ;Do this to start the program:
- ;r <ret> df1:gold1 <ret>
- ;a <ret> <ret>
- ;ri <ret> df1:goldfont2 <ret> zeichen <ret> <ret>
- ;j <ret>
-
- ;To start after pressing the mouse without assembling it again
- ;type: js <ret>
- ;If you change the program then you MUST assemble the program again.
-
- ;<ret> = return
-
- s:
- execbase = 4 ;basicadresse exec.library
-
- forbid = -132 ;forbid task switching
- permit = -138 ;permit task switching
- openlib = -408 ;open a library
- closelib = -414 ;close a library
-
- start: movem.l a0-a6,-(a7) ;save CPU-register
- lea $70000,a0
- move.w #$2000,d0
- cloop: clr.b (a0)+
- dbf d0,cloop
-
- move.l execbase.w,a6
- jsr forbid(a6) ;forbid task switching
- bsr do_open ;open graphics.library
- bsr install_bitplanes ;write bpl-starts into coplist
-
- lea $dff000,a6 ;CustomChip base
- move.l #coplist,$0080(a6) ;activate new Coplist
- clr.w $0088(a6)
- move.w #$0020,$009a(a6) ;disable vert.blanc IRQ
- move.w #$8010,$009a(a6) ;enable Copper IRQ
- move.l $006c.w,irq_retter+2 ;save old IRQ vector
- move.l #irq,$6c.w ;and point to my IRQ
-
- main_loop:
- bsr wait_rast ;wait for line 200
- btst #6,$bfe001 ;wait, until left mouse button
- beq.S end ;is pressed
- bra.S main_loop
-
- end: move.w #$000f,$0096(a6) ;stop sound
- move.l grafbase,a1 ;activate old Copperlist
- move.l $0026(a1),$0080(a6)
- clr.w $0088(a6)
- move.w #$8020,$009a(a6) ;enable vert.Blanc IRQ
- move.w #$0010,$009a(a6) ;disable Copper IRQ
- move.l execbase.w,a6 ;permit task switching
- jsr permit(a6)
- bsr do_close ;close graphics.library
- move.l irq_retter+2(pc),$006c.w;restart old IRQ
- movem.l (a7)+,a0-a6 ;get back CPU-register
- clr.l d0 ;clear Return Code
- rts ;end of program
-
- install_bitplanes:
- move.l #bitplane1,d0 ;1. Bpl adress to d0
- move.w d0,bitplanes+6 ;Lo-word to coplist
- swap d0 ;make Loword = Hiword
- move.w d0,bitplanes+2 ;and write to coplist
- move.l #bitplane2,d0 ; ...
- move.w d0,bitplanes+14 ; ...
- swap d0 ; ...
- move.w d0,bitplanes+10
- move.l #bitplane3,d0
- move.w d0,bitplanes+22
- swap d0
- move.w d0,bitplanes+18
- move.l #bitplane4,d0
- move.w d0,bitplanes+30
- swap d0
- move.w d0,bitplanes+26
- rts
-
- do_open:lea grafname(pc),a1 ;open graphics.library and
- jsr openlib(a6) ;store base to 'grafbase'
- move.l d0,grafbase
- rts
-
- do_close:
- move.l grafbase(pc),a1 ;close graphics.library
- jsr closelib(a6)
- rts
-
-
- irq: movem.l d0-d7/a0-a6,-(a7) ;CPU-register to stack
- move.b $bfdc00,d0
- move.b $bfdc01,d0
- move.w $001e(a6),d0 ;IRQ request to d0
- and.w $001c(a6),d0 ;IRQ enabled ?
- btst #4,d0 ;If not enabled or no Copper
- beq.S endirq ;IRQ => end of own IRQ
- move.w #$0010,$009c(a6) ;else clear IRQ request
- bsr scrolling ;Scrolltext moving
- bsr new_letter ;write new letter to Bpl
- endirq:
- movem.l (a7)+,d0-d7/a0-a6 ;get CPU-register from stack
- irq_retter:
- jmp $000000 ;IRQ handling
-
- wait_rast:
- move.w $0006(a6),d0
- and.w #$f800,d0
- cmp.w #$f800,d0
- bne wait_rast
- rts
-
-
- scrolling: ;Scrolltext moving
- lea bitplane1,a0 ;1. move Bpl 1
- lea -$0002(a0),a1
- bsr do_scroll
- lea bitplane2,a0 ;then Bpl 2
- lea -$0002(a0),a1
- bsr do_scroll
- lea bitplane3,a0 ;and Bpl 3
- lea -$0002(a0),a1
- bsr do_scroll
- lea bitplane4,a0
- lea -$0002(a0),a1
- do_scroll:
- move.l a0,$0050(a6) ;set Source A as Bpl start
- move.l a1,$0054(a6) ;set D as Bpl - 2 (leftscroll)
- clr.l $0064(a6) ;set modulo = 0
- clr.w $0042(a6) ;normal mode (ascending)
- move.l #$ffffffff,$0044(a6) ;mask = $ffffffff
- move.w #$c9f0,$0040(a6) ;Use A,D , D = A, Shift 4
- move.w #$0626,$0058(a6) ;hight = 31,width = 44 Byte
- waitblit:
- btst #14,$0002(a6) ;wait until Blitter is ready
- bne.S waitblit
- rts ;end of scrolling
-
- new_letter: ;write a new letter to Bpl
- subq.w #1,scroll_count ;counter for amount of
- bpl not_new_letter ;left scrolling
- move.w #$0006,scroll_count ;scroll 6 times before you
- ;take a new letter
- bsr.S clear_letter ;clear actual Bpl-end
- move.l scroll(pc),a0 ;scroll counter (pointer to
- tst.b (a0) ;actual letter, = 0 ?
- bne.S donot_restart ;if letter = 0, restart
- lea scrolltext(pc),a0
- donot_restart:
- clr.l d0
- move.b (a0)+,d0 ;letter ASCII code to d0
- move.l a0,scroll ;and write new pointer
- cmp.b #$20,d0 ;is it a space ?
- beq.S not_new_letter ;if it is, end this routine
- lea realbytes(pc),a0 ;else : a0 = table of all
- ;possible codes
- move.b d0,d1 ;save d0
- clr.l d0
- cmp_loop:
- move.b (a0)+,d2 ;compare d1 to code no.x
- cmp.b d1,d2
- beq.S letter_found ;until it is equal
- add.l #$1,d0 ;else continue
- bra.S cmp_loop
- letter_found:
- lea zeichen,a3
- bsr check
- lea bpl_pointer(pc),a2 ;table with Bpl-pointer 1-3
- moveq #3,d2 ;4 Bitplanes
- letter_loop2:
- move.l a3,a0
- move.l (a2)+,a1 ;a1 = bitplane start adress
- move.w #$002a,d1 ;32 lines hihg (1 letter)
- letter_loop:
- move.b (a0),(a1) ;and width of 3 Byte
- move.b $1(a0),$1(a1)
- move.b $2(a0),$2(a1)
- move.b $3(a0),$3(a1)
- lea $28(a0),a0 ;next 3 Byte of Bpl X
- lea $2c(a1),a1 ;next line in bitplane
- dbf d1,letter_loop ;30 lines
- add.l #$3520,a3 ;next bitplane
- dbf d2,letter_loop2 ;until Bpl 3
- not_new_letter:
- rts ;end of new letter
-
- clear_letter: ;clear a letter (space)
- lea bpl_pointer(pc),a2 ;same as above, but
- moveq #3,d1 ;don't copy data but clear
- clear_loop1: ;it !!!
- move.l (a2)+,a0
- move.w #$002a,d0
- clear_loop2:
- clr.l (a0)
- lea $002c(a0),a0
- dbf d0,clear_loop2
- dbf d1,clear_loop1
- rts
-
- check:
- cmp.l #$0,d0
- bne c1
- add.l #$0,a3
- rts
- c1:
- cmp.l #$1,d0
- bne c2
- add.l #$4,a3
- rts
- c2:
- cmp.l #$2,d0
- bne c3
- add.l #$8,a3
- rts
- c3:
- cmp.l #$3,d0
- bne c4
- add.l #$c,a3
- rts
- c4:
- cmp.l #$4,d0
- bne c5
- add.l #$10,a3
- rts
- c5:
- cmp.l #$5,d0
- bne c6
- add.l #$14,a3
- rts
- c6:
- cmp.l #$6,d0
- bne c7
- add.l #$18,a3
- rts
- c7:
- cmp.l #$7,d0
- bne c8
- add.l #$1c,a3
- rts
- c8:
- cmp.l #$8,d0
- bne c9
- add.l #$20,a3
- rts
- c9:
- cmp.l #$9,d0
- bne ca
- add.l #$690,a3
- rts
- ca:
- cmp.l #$a,d0
- bne cb
- add.l #$694,a3
- rts
- cb:
- cmp.l #$b,d0
- bne cc
- add.l #$698,a3
- rts
- cc:
- cmp.l #$c,d0
- bne cd
- add.l #$69c,a3
- rts
- cd:
- cmp.l #$d,d0
- bne ce
- add.l #$6a0,a3
- rts
- ce:
- cmp.l #$e,d0
- bne cf
- add.l #$6a4,a3
- rts
- cf:
- cmp.l #$f,d0
- bne c10
- add.l #$6a8,a3
- rts
- c10:
- cmp.l #$10,d0
- bne c11
- add.l #$6ac,a3
- rts
- c11:
- cmp.l #$11,d0
- bne c12
- add.l #$6b0,a3
- rts
- c12:
- cmp.l #$12,d0
- bne c13
- add.l #$d20,a3
- rts
- c13:
- cmp.l #$13,d0
- bne c14
- add.l #$d24,a3
- rts
- c14:
- cmp.l #$14,d0
- bne c15
- add.l #$d28,a3
- rts
- c15:
- cmp.l #$15,d0
- bne c16
- add.l #$d2c,a3
- rts
- c16:
- cmp.l #$16,d0
- bne c17
- add.l #$d30,a3
- rts
- c17:
- cmp.l #$17,d0
- bne c18
- add.l #$d34,a3
- rts
- c18:
- cmp.l #$18,d0
- bne c19
- add.l #$d38,a3
- rts
- c19:
- cmp.l #$19,d0
- bne c1a
- add.l #$d3c,a3
- rts
- c1a:
- cmp.l #$1a,d0
- bne c1b
- add.l #$d40,a3
- rts
- c1b:
- cmp.l #$1b,d0
- bne c1c
- add.l #$13b0,a3
- rts
- c1c:
- cmp.l #$1c,d0
- bne c1d
- add.l #$13b4,a3
- rts
- c1d:
- cmp.l #$1d,d0
- bne c1e
- add.l #$13b8,a3
- rts
- c1e:
- cmp.l #$1e,d0
- bne c1f
- add.l #$13bc,a3
- rts
- c1f:
- cmp.l #$1f,d0
- bne c20
- add.l #$13c0,a3
- rts
- c20:
- cmp.l #$20,d0
- bne c21
- add.l #$13c4,a3
- rts
- c21:
- cmp.l #$21,d0
- bne c22
- add.l #$13c8,a3
- rts
- c22:
- cmp.l #$22,d0
- bne c23
- add.l #$13cc,a3
- rts
- c23:
- cmp.l #$23,d0
- bne c24
- add.l #$13d0,a3
- rts
- c24:
- cmp.l #$24,d0
- bne c25
- add.l #$1a40,a3
- rts
- c25:
- cmp.l #$25,d0
- bne c26
- add.l #$1a44,a3
- rts
- c26:
- cmp.l #$26,d0
- bne c27
- add.l #$1a48,a3
- rts
- c27:
- cmp.l #$27,d0
- bne c28
- add.l #$1a4c,a3
- rts
- c28:
- cmp.l #$28,d0
- bne c29
- add.l #$1a50,a3
- rts
- c29:
- cmp.l #$29,d0
- bne c30
- add.l #$1a54,a3
- rts
- c30:
- cmp.l #$2a,d0
- bne c31
- add.l #$1a58,a3
- rts
- c31:
- cmp.l #$2b,d0
- bne c32
- add.l #$1a5c,a3
- rts
- c32:
- cmp.l #$2c,d0
- bne c33
- add.l #$1a60,a3
- rts
- c33:
- cmp.l #$2d,d0
- bne c34
- add.l #$20d0,a3
- rts
- c34:
- cmp.l #$2e,d0
- bne c35
- add.l #$20d4,a3
- rts
- c35:
- rts
-
- bpl_pointer: dc.l bitplane1+40,bitplane2+40,bitplane3+40,bitplane4+40
- scroll: dc.l scrolltext
- scroll_count: dc.w 1
- realbytes:
- dc.b "ABCDEFGHIJKLMNOPQRSTUVXYZ[';1234567890?!=.,@:+-"
- scrolltext:
- dc.b "ABCDEFGHIJKLMNOPQRSTUVXYZ[';1234567890?!=.,@:+- "
- ;dc.b "THIS ZZ ACID FONT ZZ WORKS PRETTY GOOD??!!! "
- ;dc.b "PRINCE PRESENTS 1 66 BAT DANCE 66! HE DO NOT"
- ;DC.B " LIKE 77 SUPERMAN 77?? I WONDER IF HE PLAYS"
- ;DC.B " 88 TENNIS 88 OR MAYBE 99 DART 99 2I DO NOT THINK"
- ;DC.B " SO3!! WHAT DO YOU THINK SUCKER??00 I THINK"
- ;DC.B " HE LIKES TO 44 SWIM 55 AND LISTEN TO ZZ ACID ZZ!"
- ;DC.B " THIS TEXT WILL NOW RESTART ZZZZZZZZZZZZZZZZZZZZ "
- dc.b 0
- even
-
- grafname:
- dc.b 'graphics.library',0
- even
- grafbase:
- dc.l 0
-
- delay: dc.b 0
- even
- coplist:
- dc.l $009c8010,$008e2c61,$00902cd1,$00920038,$009400d0
- dc.l $01040000,$01020000,$01080004,$010a0004,$01004200
- dc.l $00e00007,$00e20000,$00e40007,$00e60000,$00e80007
- dc.l $00ea0000,$00ec0007,$00ee0000,$00f00007,$00f20000
- dc.l $018e0c90,$01900c80,$01920b70,$01940a60,$01960950
- dc.l $01980840,$019a0830,$019c0730,$019e0620
- dc.l $6401fffe,$01800000,$01840f00,$01880fe0,$018a0ec0
- dc.l $018c0db0
- ;dc.l $01900c80,$01920b70,$01940a60
- ;dc.l $01960950,$01980840,$019a0830,$019c0730,$019e0620
- bitplanes:
- dc.l $00e00000,$00e20000,$00e40000,$00e60000,$00e80000
- dc.l $00ea0000,$00ec0000,$00ee0000
- dc.l $8e01fffe,$01800aaa
- dc.l $00e00007,$00e20000,$00e40007,$00e60000,$00e80007
- dc.l $00ea0000,$00ec0007,$00ee0000
- sprite0:
- dc.l $01200000,$01220000,$01240000,$01260000,$01280000,$012a0000
- dc.l $012c0000,$012e0000,$01300000,$01320000,$01340000,$01360000
- dc.l $01380000,$013a0000,$013c0000,$013e0000
- dc.l $fffffffe
-
- zeichen: blk.b 54400,0
- bitplane1: blk.b 1848,0
- bitplane2: blk.b 1848,0
- bitplane3: blk.b 1848,0
- bitplane4: blk.b 1848,0