home *** CD-ROM | disk | FTP | other *** search
-
- ; ****************************************************
- ; ***** *****
- ; ***** MemSearch *****
- ; ***** ------------ *****
- ; ***** *****
- ; ***** By : Orlando Budelacci *****
- ; ***** Birmannsgasse 34 *****
- ; ***** CH-4055 Basel *****
- ; ***** Switzerland *****
- ; ***** *****
- ; ***** Comments and contributions welcomed! *****
- ; ***** *****
- ; ****************************************************
-
- ; ---------- Note -----------
-
- ; *** Object file MUST have chip hunks !
- ; *** Else it WON'T work on computers with fast memory !!!!!!!!
-
- ; *** THE PROGRAM ISN'T STARTABLE FROM THE ASSEMBLER
- ; *** BECAUSE OF THE TEXTOUTPUT, SO SAVE THE EXECUTABLE
- ; *** AND HAVE A LOOK AT IT THEN...
-
- ; Written with Masterseka
-
- ; ---------- Versions --------
-
- ; *** Version V1.01 finished May, 17th 1990
- ; *** 100% pc-relative
-
- ; ----------------------------------------------------------------
-
- ; *** Start of program ***
-
- start:
-
- ; *** AllocMem for the info board ***
-
- move.l 4.w,a6
- move.l #80*28,d0 ;size ? 28 lines/hires
- move.l #$10002,d1 ;type
- jsr -198(a6)
- lea memadr(pc),a2
- move.l d0,(a2)
- bne.s alloc_rastport_mem
- rts
-
- ; *** Alloc rastport memory ***
- ; *** Pointer to rastport in label : 'rastport' ***
-
- alloc_rastport_mem:
- moveq #100,d0 ;size ? 28 lines/hires
- move.l #$10002,d1 ;type / chip / clear
- jsr -198(a6)
- lea rastport(pc),a2
- move.l d0,(a2)
- bne.s open_dos
- bra.L freemem ;if error while allocating
- ;rastport mem, then
- ;free status line memory
-
- ; *** open dos ***
-
- open_dos:
- lea dosname(pc),a1
- jsr -408(a6)
- lea dosbase(pc),a2
- move.l d0,(a2)
-
- ; *** Put start/end addresses ***
-
- lea madr2(pc),a1
- move.l memadr(pc),d2
- add.l #[80*28],d2
- bsr.L long_to_ascii
-
- lea madr(pc),a1
- move.l memadr(pc),d2
- bsr.L long_to_ascii
-
- ; *** Get output window ***
- ; *** you get : output handle in label 'outhandle'
-
- get_out_put:
- move.l dosbase(pc),a6
- jsr -60(a6) ;OutPut
- lea outhandle(pc),a3
- move.l d0,(a3)
-
- lea help(pc),a2
- move.l a2,d2
- move.l #helpend-help,d3
- jsr -48(a6)
-
- ; *** Wait return to start ***
-
- move.l outhandle(pc),d1
- jsr -42(a6) ;Read
-
- ; *** forbid ***
-
- forbid:
- move.l 4.w,a6
- jsr -132(a6)
-
- ; *** Set copper bpl's to allocated memory ***
-
- lea tab_location+2(pc),a0
- move.l memadr(pc),d1
- swap d1
- move.w d1,(a0)
- addq.w #4,a0
- swap d1
- move.w d1,(a0)
-
- ; *** Set up system things ***
-
- init_system:
- lea gfxname(pc),a1
- jsr -408(a6)
- lea gfxbase(pc),a2
- move.l d0,(a2)
-
- init_bitmap:
- move.l gfxbase(pc),a6
- lea bitmap(pc),a0
- moveq #1,d0
- move.l #640,d1
- moveq #28,d2
- jsr -390(a6)
- lea bitmap+8(pc),a2 ;Initbitmap
- move.l memadr(pc),(a2)
-
- initrastport:
- move.l rastport(pc),a1 ;InitRastport
- jsr -198(a6)
-
- move.l rastport(pc),a5
- lea bitmap(pc),a3
- move.l a3,4(a5)
-
- ; *** Insert correct pointer to fontname in the txtstruc ***
-
- lea txtstruc(pc),a0
- lea fontname(pc),a1
- move.l a1,(a0)
-
- open_font:
- lea txtstruc(pc),a0
- jsr -72(a6) ;OpenFont
- move.l d0,a0
- move.l rastport(pc),a1
- jsr -66(a6) ;SetFont
-
- moverast:
- move.l rastport(pc),a1
- moveq #20,d0
- moveq #10,d1
- jsr -240(a6)
-
- ext:
- move.l #textend-text,d0
- move.l rastport(pc),a1
- lea text(pc),a0
- jsr -60(a6) ;Text
-
- ; *** Start displaying ***
-
- start_copper:
- lea copper(pc),a2
- move.l a2,$dff080
-
- ; *** Start interrupt ***
-
- start_int:
- lea intvec(pc),a2
- move.l $6c,(a2)
- lea int(pc),a2
- move.l a2,$6c
-
- mouse:
- bsr.L fkeys
- lea endflag(pc),a2
- tst.b (a2)
- bne.s close_all
-
- btst #6,$bfe001
- bne.s mouse
-
- Close_all:
- move.l gfxbase(pc),a0
- lea $dff000,a3
- move.l 38(a0),$80(a3)
- move.w #$83f0,$96(a3)
- lea intvec(pc),a2
- move.l (a2),$6c
-
- close_gfx:
- move.l 4.w,a6
- move.l gfxbase(pc),a1
- jsr -414(a6)
-
- close_dos:
- move.l dosbase(pc),a1
- jsr -414(a6)
-
- permit:
- move.l 4.w,a6
- jsr -138(a6)
- freemem: ;bitplane
- move.l memadr(pc),a1
- move.l #80*28,d0 ;size 28 lines /hires
- jsr -210(a6)
-
- end:
- moveq #0,d0
- rts
-
- ; *** Interrupt ***
-
- int:
- movem.l d0-d7/a0-a6,-(sp)
-
- ; *** Make longword from 2 words at bpl position ***
-
- makelo: lea bpl(pc),a1
- bsr.L create_longword ;save longword in
- ;pointer longword
- ; *** $000000 to $7ffff ***
-
- lea longadr(pc),a3
- move.l (a3),d0
- move.l speed(pc),d1
- cmp.l d1,d0
- blo.s low ;branch if lower
- move.l #$7ffff,d2
- sub.l d1,d2
- cmp.l d2,d0
- bhi.s high ;branch if higher
- bra.s keys
- low:
- move.l #$7ffff-961,(a3)
- bra.s keys
- high:
- move.l #$0+961,(a3)
-
- ; *** Key test ***
-
- keys:
- move.b $bfec01,d0
- move.l speed(pc),d5
- lea longadr(pc),a3
- lea statusflag(pc),a4
- lea modtext(pc),a5
-
- cmp.b #$65,d0
- beq.s down
- cmp.b #$67,d0
- beq.s up
- cmp.b #$63,d0
- beq.s right
- cmp.b #$61,d0
- beq.s left
- cmp.b #$33,d0
- beq.L moduloUp
- cmp.b #$37,d0
- beq.L ModuloDown
-
- bra.s exit
-
- down:
- add.l d5,(a3)
- bra.s exit
-
- right:
- addq.l #2,(a3)
- bra.s exit
- left:
- subq.l #2,(a3)
- bra.s exit
-
- up:
- sub.l d5,(a3)
-
- exit:
-
- ; *** recalculate longword in two words for copper list ***
-
- move.l longadr(pc),d2
- bsr.L make_words
- lea numtext(pc),a1
-
- ; *** Address is in d2 / calculate ascii values
- ; *** and write them into 'num' ***
-
- bsr.L long_to_ascii
-
- ; *** Move rastport to correct position ***
-
- move.l gfxbase(pc),a6
- move.l rastport(pc),a1
- move.l #572,d0
- moveq #10,d1
- jsr -240(a6)
-
- ; *** Print contents of pointer 'longadr' ***
-
- move.l #numtextend-numtext,d0
- move.l rastport(pc),a1
- lea numtext(pc),a0
- jsr -60(a6) ;Text
-
- ; *** Restore status line ? ***
-
- lea statusflag(pc),a2
- cmp.b #1,(a2)
- bne.s endi
-
- ; *** Status line / move rastport ***
-
- move.l rastport(pc),a1
- moveq #20,d0
- moveq #20,d1
- jsr -240(a6)
-
- ; *** Print status line ***
-
- move.l #infotextend-infotext,d0
- move.l rastport(pc),a1
- lea infotext(pc),a0
- jsr -60(a6) ;Text
- lea statusflag(pc),a2
- clr.b (a2)
-
- ; *** End of interrupt ***
-
- endi:
- movem.l (sp)+,d0-d7/a0-a6
- dc.w $4ef9
-
- intvec:dc.l 0
-
- ; *** Subroutines ***
-
-
- ; *** Display help text ***
-
- helpME:
-
- end_interrupt:
- move.l intvec(pc),$6c
- lea $dff000,a5
-
- move.w #$8020,$96(a5)
- move.l 4.w,a6
- jsr -138(a6)
-
- lea gfxname(pc),a1
- jsr -408(a6)
- move.l d0,a0
- move.l 38(a0),$80(a5)
-
- move.l dosbase(pc),a6
- move.l outhandle(pc),d1
- lea helptext(pc),a2
- move.l a2,d2
- move.l #Helptextend-helptext,d3
- jsr -48(a6)
-
- move.l outhandle(pc),d1
- jsr -42(a6) ;Read
-
- move.l 4.w,a6
- jsr -132(a6)
-
- lea intvec(pc),a2
- move.l $6c,(a2)
- lea int(pc),a2
- move.l a2,$6c
-
- move.w #$0020,$96(a5)
-
- lea copper(pc),a2
- move.l a2,$80(a5)
- rts
-
- ; *** Longword to ascci-string ***
-
- ; *** Values : a1 = pointer to destination
- ; d2 = source
-
- long_to_ascii:
- moveq #7,d1
-
- asciiloop1:
- rol.l #4,d2
- move.l d2,d3
- and.b #15,d3
- add.b #$30,d3
- cmp.b #$3a,d3
- bcs.s asciiloop2
- addq.b #7,d3
- asciiloop2:
- move.b d3,(a1)+
- dbra d1,asciiloop1
- add.l #20,a1
- rts
-
- ; *** Create longword from 4 words ***
-
- ; *** Values : a1 = pointer to begin of 4 words
-
-
- ; *** You get : longword in label 'longadr'
-
- create_longword:
- addq.w #2,a1
- move.w (a1),d5
- swap d5
- addq.w #4,a1
- move.w (a1),d5
- lea longadr(pc),a1
- move.l d5,(a1)
- rts
-
- ; *** Make longword for 4 copper words ***
-
- ; *** values : a1 = pointer to bpl
- ; d2 = what to put in bpl
-
- ; *** You get : longword in 2 words at bpl in copper-list1
-
- make_words:
- lea bpl(pc),a1
- addq.w #2,a1
- swap d2
- move.w d2,(a1)
- addq.w #4,a1
- swap d2
- move.w d2,(a1)
- rts
-
- ; *** Put text in current window ***
-
- ; *** You give : d2 = pointer to text
- ; d3 = lenght of text
-
- ; *** you get : text in current window
-
- text_dos:
- move.l dosbase(pc),a6
- move.l outhandle(pc),d1
- jmp -48(a6) ;Write
-
- ; *** Test function keys ***
-
- fkeys:
- move.b $bfec01,d0
- lea infotext+19(pc),a0
- lea statusflag(pc),a4
- lea speed(pc),a5
- lea bplcon0+2(pc),a3
- lea color+2(pc),a2
-
- cmp.b #$5f,d0
- beq.L speed1
- cmp.b #$5d,d0
- beq.L speed2
- cmp.b #$5b,d0
- beq.L speed3
- cmp.b #$59,d0
- beq.L speed4
- cmp.b #$57,d0
- beq.L speed5
- cmp.b #$55,d0
- beq.L LoRes
- cmp.b #$53,d0
- beq.L Hires
- cmp.b #$51,d0
- beq.L address1
- cmp.b #$4f,d0
- beq.L address2
- cmp.b #$4d,d0
- beq.L color1
- cmp.b #$3f,d0
- bne.s test_help
- lea modulo+2(pc),a6
- lea modtext(pc),a5
- move.w #$0000,(a6)
- move.b #'0',(a5)+
- move.b #'0',(a5)+
- move.b #'0',(a5)+
- move.b #'0',(a5)
- move.b #1,(a4) ;refresh beam
-
- test_help:
- cmp.b #$41,d0
- beq.L helpME
- cmp.b #$75,d0
- bne.s fkeys_fertig
- lea endflag(pc),a1
- move.b #1,(a1)
-
- fkeys_fertig:
- rts
-
- ; *** The different speeds ***
- ; *** Pointer to statusflag in a4
- ; *** Pointer to speed in a5
-
- speed1:
- move.b #'1',(a0)
- move.l #80,(a5)
- move.b #1,(a4)
- rts
-
- speed2:
- move.b #'2',(a0)
- move.l #160,(a5)
- move.b #1,(a4)
- rts
- speed3:
- move.b #'3',(a0)
- move.l #240,(a5)
- move.b #1,(a4)
- rts
-
- speed4:
- move.b #'4',(a0)
- move.l #480,(a5)
- move.b #1,(a4)
- rts
-
- speed5:
- move.b #'5',(a0)
- move.l #960,(a5)
- move.b #1,(a4)
- rts
-
- ; *** Change resolution ***
- ; *** Pointer to bplcon0+2 in a3
- ; *** Pointer to statusfalg in a4
- ; *** Pointer to color+2 in a2
-
- LoRes:
- move.w #$1200,(a3)
- lea infotext+32(pc),a0
- move.b #'L',(a0)+
- move.b #'o',(a0)
- move.b #1,(a4)
- rts
-
- Hires:
- move.w #$9200,(a3)
- lea infotext+32(pc),a0
- move.b #'H',(a0)+
- move.b #'i',(a0)
- move.b #1,(a4)
- rts
-
- address1:
- move.l #$20000,d2
- bsr.L make_words
- rts
-
- address2:
- move.l #$65000,d2
- bsr.L make_words
- rts
-
- ; *** Insert new color ****
-
- Color1:
- clr.b $bfec01
- lea infotext+52(pc),a0
- lea colorcount(pc),a5
- addq.b #1,(a5)
- cmp.b #1,(a5)
- beq.s green
-
- cmp.b #2,(a5)
- beq.s blue
-
- cmp.b #3,(a5)
- beq.s white
-
- Green:
- move.b #'4',(a0)+
- move.b #'a',(a0)+
- move.b #'4',(a0)
- move.b #1,(a4)
- move.w #$04a4,(a2)
- rts
-
- White:
- move.b #'a',(a0)+
- move.b #'a',(a0)+
- move.b #'a',(a0)
- move.b #1,(a4)
- move.w #$0aaa,(a2)
- clr.b (a5)
- rts
-
- Blue:
- move.b #'7',(a0)+
- move.b #'7',(a0)+
- move.b #'f',(a0)
- move.b #1,(a4)
- move.w #$055f,(a2)
- rts
-
-
- ; *** The modulo value change routine ***
- ; *** a5 = pointer to modtext
- ; *** a4 = pointer to statusflag
-
- ModuloUp:
- lea modulo+2(pc),a1
- lea modcounter(pc),a0
- cmp.b #7,(a0)
- bne.s goback
- addq.w #$0002,(a1)
-
- ; *** Display ascii value of modulo ***
-
- moveq #3,d1 ;4 chars
- move.l (a1),d2 ;value to display
- lea modtext(pc),a1
- bsr.L asciiloop1 ;bin to ascii
- move.b #1,(a4) ;set status flag /
- clr.b (a0)
-
- goBACK:
- addq.b #1,(a0)
- bra.L exit
-
- ModuloDown:
- lea modulo+2(pc),a1
- lea modcounter2(pc),a0
-
- cmp.b #10,(a0)
- bne.s goback2
- subq.w #$0002,(a1)
- clr.b (a0)
-
- ; *** Insert ascii value in status line ***
-
- moveq #3,d1 ;4 chars
- move.l (a1),d2 ;pointer to source (modtext)
- lea modtext(pc),a1
- bsr.L asciiloop1 ;bin to ascii
- move.b #1,(a4) ;set status flag /
- clr.b (a0)
-
- goBACK2:
- addq.b #1,(a0)
- bra.L exit
-
- ; -------------------- The copper list --------------------
-
- copper:
- dc.w $0096,$0020
- dc.w $0102,$0000
- dc.w $008e,$2c81
- dc.w $0090,$2cc1
- dc.w $0092,$0038
- dc.w $0094,$00d0
- dc.w $0180,$0000
- dc.w $0108,$0000
-
- tab_location:
- dc.w $00e0,$0007
- dc.w $00e2,$0000
- dc.w $0100,$9200
-
- ; *** Beam at bottom of screen ***
-
- dc.w $0182,$0aaf
- dc.w $2c11,$fffe,$0180,$0009
- dc.w $2f11,$fffe,$0180,$000b
-
- dc.w $4311,$fffe,$0180,$0009
- dc.w $4611,$fffe,$0180,$0000
- color: dc.w $0182,$0aaa
-
- ; *** Start location of plane ***
-
- bpl: dc.w $00e0,$0006
- dc.w $00e2,$0000
-
- modulo: dc.w $0108,$0000
-
- bplcon0:dc.w $0100,$9200
-
- dc.w $ffff,$fffe
-
- ; *** Text / Datas ***
-
- text: dc.b 'MemSearch V1.01 / 1990 by Orlando B. / '
- dc.b 'Current address position : $'
- textend:
- numtext:dc.b '00000000'
- numtextend:
-
- infotext:
- dc.b 'STATUS : Speed : 04 / Mode : HiRes / Color : $0aaa /'
- dc.b ' Modulo : $'
- modtext:
- dc.b '0000'
- modtextend:
- infotextend:
-
- ; *** System things ***
-
- gfxname: dc.b 'graphics.library',0
- even
- gfxbase: dc.l 0
- bitmap: blk.b 16,0
- rastport: dc.l 0
-
- ; *** Things for address display ***
-
- longadr: dc.l 0
- memadr: dc.l 0
- speed: dc.l 480
-
- txtstruc:
- dc.l 0
- dc.w 8
- dc.w 0
-
- fontname: dc.b 'topaz.font',0
- even
- dosbase: dc.l 0
- outhandle: dc.l 0
- dosname: dc.b 'dos.library',0
- even
-
- help:
- dc.b $a
- dc.b $9b,"0;33;40m"
- dc.b 'MemSearch V1.01'
- dc.b $9b,"0;31;40m"
- dc.b ' - by Orlando Budelacci, May 1990, Public Domain.',$a
- dc.b 'Bitplane memory allocated from $'
- madr: dc.b '00000000 to $'
- madr2: dc.b '00000000',$a,$a
- dc.b '<Return>'
- helpend:
-
-
- ; **** Datas for the Help page ****
-
- helptext:
- dc.b 0,0,$c,$a,$a
- dc.b 'F1 to F5 = Different speeds (slow to fast)',$a
- dc.b 'F6 = LoRes',$a
- dc.b 'F7 = HiRes',$a
- dc.b 'F8 = Go to $20000',$a
- dc.b 'F9 = Go to $65000',$a
- dc.b 'FA = Change color',$a,$a
- dc.b 'Left Alt = Decrease modulo',$a
- dc.b 'Left Amiga = Increase modulo',$a
- dc.b 'Left Shift = Reset modulo',$a
- dc.b 'Cursor Keys= Change address position',$a
- dc.b 'Escape = Quit',$a
- dc.b 'Left Button= Quit',$a,$a
- dc.b 'Press <Return>'
- helptextend:
-
- ; *** Color routine ***
-
- colorcount: dc.b 0
- statusflag: dc.b 1
-
- ; *** Datas for modulo change routine ***
-
- modcounter: dc.w 0
- modcounter2: dc.w 0
- endflag: dc.b 0
-
- nd:
-