section Main,code jmp main_startup ;settings ;main_programname: MACRO ; Sets program name (Window..) ; dc.b 'Program name' ; ENDM ; ;main_sysinfooff ; Don't show sysinfo ;main_reqinfooff ; Don't show requirements ;main_endinfooff ; Don't show end info ;main_debugoff ; disables debugger ; ;main_introcode: MACRO ; Code to run after system startup ;main_endcode: MACRO ; Code to run before system closedown ; ;main_skipsysinfo ; Skip system test ;main_cacheoff ; Disables caches (If existing) ;main_dostextoff ; Disables ALL dos output (Text) ;main_systemon ; Leaves system on no system disable ;main_vectortrap = % ; Vector bits: 9 = Bus error 1 ; 8 = Address error 1 ; 7 = Illegal command 1 ; 6 = Division by zero 1 ; 5 = CHK command 1 ; 4 = TRAPV command 0 ; 3 = Privilege violation 0 ; 2 = Trace 0 ; 1 = Axxx command emulation 1 ; 0 = Fxxx command emulation 1 ;main_trap7 ; Use level 7 to exit ;main_reqproc = 2 ; Requiered processor 1=010 or greater ;main_reqfpu ; Set to require FPU ;main_reqmmu ; Set to require Extended Chip Set ;main_reqaga ; Set to require AGA chipset ;main_reqecs ; Set to require Extended Chip Set ;main_reqpal ; Set to require PAL video mode ;main_reqntsc ; Set to require NTSC video mode ;main_reqfast = 4096 ; How many KB Fast RAM that is needed ;main_reqchip = 2048 ; How many KB Chip RAM that is needed ; ;main_rgbfadeto = $0RGB ; Fade to colour at start (12 bit) ;main_rgbfadefrom = $0RGB ; Fade from colour at end (12 bit) ;main_faderoff ; Disable colour fade (At start and End) ;main_noexit ; Disable exit function until end ;main_usermb ; Call Debug with RMB ;main_uselmb ; Call debug with Left mouse button ;main_length = xxxx ; max run time. ;main_disableint ; Disable all interrupt stuff ;main_short ; Shortest startup ;main_meteroff ; Disables meter code (Saving memory) ;main_meteron ; Enables the frame meter ;main_playeroff ; Player off ;main_disabledos ; Disables DOS routines (Load,Execute) ;main_loader ; Use this switch when load proggy ********************************************************** Replayer settings ** IFND main_loader IFND main_playeroff IFND main_ownplayer main_musicinit: MACRO ; Command to start module (A0=Mod ptr) bsr PPR_Init ENDM main_musicplay: MACRO ; Command to run every frame (CIA=None) move.w #$8200,$dff096 bsr PPR_Music ENDM main_musicstop: MACRO ; Command to Stop Music bsr PPR_End ENDM PPR_68020 = 1 PPR_NotePlayer = 0 include "demo:System/ProRunner.S" ENDIF ENDIF ENDIF ******************************************************************************* ;------------------------------------------------------------------ Defaults -- ;----------------------------------------------- Main short -- IFD main_short IFND main_sysinfooff ; Don't show sysinfo main_sysinfooff ; Don't show sysinfo ENDIF IFND main_disabledos ; Don't use dos functions main_disabledos ; Don't use dos functions ENDIF IFND main_meteroff ; Don't use meter main_meteroff ; Don't use meter ENDIF IFND main_reqinfooff ; Don't show requirements main_reqinfooff ; Don't show requirements ENDIF IFND main_endinfooff ; Don't show end info main_endinfooff ; Don't show end info ENDIF IFND main_debugoff ; disables debugger main_debugoff ; disables debugger ENDIF IFND main_dostextoff ; Disables ALL dos output (Text) main_dostextoff ; Disables ALL dos output (Text) ENDIF IFND main_disableint ; Disable all interrupt stuff main_disableint ; Disable all interrupt stuff ENDIF IFND main_playeroff ; Player off main_playeroff ; Player off ENDIF IFND main_faderoff ; Player off main_faderoff ; fader off ENDIF IFND main_skipsysinfo ; Skip system test main_skipsysinfo ; Skip system test ENDIF ENDIF ;------------------------------------------- main_uselmb -- IFND main_uselmb main_usermb ENDIF ;------------------------------------------- main_vectortrap -- IFND main_vectortrap main_vectortrap = %1111100011 ENDIF ;------------------------------------------ main_dostextoff -- IFD main_dostextoff ; Disables ALL dos output (Text) IFND main_sysinfooff ; Don't show sysinfo main_sysinfooff ; Don't show sysinfo ENDIF IFND main_reqinfooff ; Don't show requirements main_reqinfooff ; Don't show requirements ENDIF IFND main_endinfooff ; Don't show end info main_endinfooff ; Don't show end info ENDIF ENDIF ;----------------------------------------------------------- main_textvaron -- IFND main_debugoff main_textvaron ENDIF IFD main_debugoff IFND main_dostextoff main_textvaron ENDIF ENDIF ;-------------------------------------------------------- main_skipsysinfo -- IFD main_skipsysinfo IFND main_sysinfooff ; Don't show sysinfo main_sysinfooff ; Don't show sysinfo ENDIF IFND main_reqinfooff ; Don't show requirements main_reqinfooff ; Don't show requirements ENDIF ENDIF IFD main_debugoff IFND main_meteroff main_meteroff ENDIF ENDIF ********************************************************************* Macros ** macro_sync: MACRO ; Kills: d7 -- Macro_Sync IFND main_meteroff movem.l d0-a0,-(a7) move.l main_dataptr,a0 move.l 44(a0),a0 jsr (a0) move.l main_dataptr,a0 move.l d0,48(a0) ENDIF .waitsync\@: move.l $dff004,d7 and.l #$1ff00,d7 cmp.l #305*$100,d7 bne.s .waitsync\@ IFND main_meteroff move.l main_dataptr,a0 move.l 40(a0),a0 jsr (a0) movem.l (a7)+,d0-a0 ENDIF ENDM macro_waitvbl: MACRO ; Kills: d7 -- Macro_WaitVbl .waitsync1\@: move.l $dff004,d7 and.l #$1ff00,d7 cmp.l #305*$100,d7 bne.s .waitsync1\@ .waitsync2\@: move.l $dff004,d7 and.l #$1ff00,d7 cmp.l #305*$100,d7 beq.s .waitsync2\@ ENDM ************************************************************** START OF CODE ** IFND main_loader main_startup: IFND main_short IFD main_fakearg lea .fakearg,a0 move.l a0,a1 moveq.l #0,d0 .countloop: addq.l #1,d0 tst.b (a1)+ bne.s .countloop bra.s .okletsgo .fakearg: main_fakearg dc.b 0 even .okletsgo: ENDIF ENDIF bra.w main_sysinit main_sysstartupok:;--------------------------------------- System startup ok -- IFD main_introcode main_introcode ENDIF IFND main_skipsysinfo bsr.w main_showsysinfo bsr.w main_checkreq tst.w main_ok2run bne.s main_skipprog ENDIF IFND main_systemon IFND main_disableint IFD main_length move.l #main_length,main_timer ENDIF ENDIF bsr.w main_disablesystem ENDIF move.l a7,main_oldsp IFD main_meteron bsr.w main_framemeteron ENDIF jsr main_start IFND main_systemon move.l main_dataptr,a0 move.w #13,56(a0) ; main_trappedvector ENDIF jmp main_cont main_exit: IFND main_systemon move.l main_dataptr,a0 move.w #0,56(a0) ; main_trappedvector ENDIF main_cont: move.l main_oldsp,a7 IFD main_meteron bsr.w main_framemeteroff ENDIF IFND main_systemon bsr.w main_restoresystem ENDIF *--------------------------------------------------------- Close down system -- main_skipprog: IFND main_systemon IFND main_endinfooff IFND main_skipsysinfo bsr.w main_exitmsg ENDIF ENDIF ENDIF IFD main_endcode main_endcode ENDIF main_dealloc: IFND main_systemon IFND main_debugoff move.l $4,a6 ; Exec base address move.l main_configscr,d0 ; Get address beq.s .nodealloc ; Nothing allocated move.l d0,a1 ; Address ptr move.l #20480+4096,d0 ; Dealloc 1 bpl jsr -210(a6) ; Exec FreeMem .nodealloc: move.l kbd_macroptr,d0 beq.s .nodealloc2 move.l d0,a1 move.l #16384,d0 jsr -210(a6) ; Exec FreeMem .nodealloc2: ENDIF ENDIF main_closedos: tst.b main_conuse ; Was console window openend? beq.s .noconsoleopen ; Not. move.l main_dataptr,a6 move.l 64(a6),d1 ; main_conhandler,d1 ; Get ConHandler move.l 60(a6),a6 ; main_doshandler,a6 Get DosHandler jsr -36(a6) ; Dos close file .noconsoleopen: move.l $4,a6 ; Exec lib handler move.l main_dataptr,a1 move.l 60(a1),a1 ; main_doshandler,a1 Get dos handler jsr -414(a6) ; Exec close lib main_nodoslib: rts ENDIF *********************************************************** MAIN_LOADER CODE ** IFD main_loader main_startup: move.l a7,main_oldsp bsr.w dos_readaddy move.l d0,a0 bsr.w main_setnewdata cmp.l #'TBL.',main_idcode bne.w main_noloader move.l $4.w,a6 ; Exec base tst.b 297(a6) ; Test processor flags beq.s .novbr ; No vbr = 68000 lea main_getvbr,a5 ; Ptr to supervisor routine jsr -30(a6) ; Supervisor .novbr: lea $dff000,a6 move.w #$0040,$9a(a6) ; Disable blitter intena .w8blt: btst #6,$02(a6) bne.s .w8blt move.w #$0040,$96(a6) .w8: move.l $04(a6),d0 and.l #$1ff00,d0 cmp.l #$100*305,d0 bne.s .w8 move.w #$7de0,$96(a6) move.l main_exitaddy,main_oldexit ; Save old exit move.l #main_exit,main_exitaddy clr.w main_lock clr.l main_returnvalue jsr main_start move.l #'OK!!',main_returnvalue bra.s main_doit main_exit: st.b main_lock move.l #'EXIT',main_returnvalue main_doit: st.b main_lock move.l main_oldexit,main_exitaddy ; Restore old exit move.l main_oldsp,a7 lea $dff000,a6 clr.l main_vblint clr.l main_vblint2 move.w #$0040,$9a(a6) ; Disable blitter intena .w8blt: btst.b #6,$02(a6) bne.s .w8blt move.w #$0040,$96(a6) ; Disable BLT DMA .w8: move.l $04(a6),d0 and.l #$1ff00,d0 cmp.l #$100*305,d0 bne.s .w8 move.w #$7de0,$96(a6) ; move.w #$0040,$9c(a6) move.w #$8200!%1000000,$96(a6) ; Enable blitter DMA clr.l main_bltint move.w #$8008,$9a(a6) ; Enable timers and ports bsr.w main_restoredata main_noloader: moveq.l #0,d0 rts main_setnewdata:;in: a0=Ptr to dosinfo block ptr move.l a0,main_olddataptr move.l (a0),a2 ; a0=Start of data block move.l a2,main_oldinfo lea $dff000,a6 .w8: move.l $04(a6),d0 and.l #$1ff00,d0 cmp.l #$100*280,d0 bne.s .w8 subq.l #8,a2 lea main_datablockstart,a1 move.w #(main_datablockend-main_datablockstart)/4-1,d0 .loop: move.l (a2)+,(a1)+ dbra d0,.loop move.l #main_infoblock,(a0) ; Set new data ptr rts main_restoredata: move.l main_olddataptr,a0 move.l main_oldinfo,a2 lea $dff000,a6 .w8: move.l $04(a6),d0 and.l #$1ff00,d0 cmp.l #$100*280,d0 bne.s .w8 move.l a2,a3 subq.l #8,a2 lea main_datablockstart,a1 move.w #(main_datablockend-main_datablockstart)/4-1,d0 .loop: move.l (a1)+,(a2)+ dbra d0,.loop move.l a3,(a0) ; Set new data ptr rts main_oldinfo: dc.l 0 main_oldexit: dc.l 0 main_olddataptr:dc.l 0 ; Old data ptr ENDIF ************************************************ Main_Loader & Main Code+DATA ** main_getvbr: dc.l $4e7a0801 ;movec vbr,d0 move.l d0,main_vbrbase rte IFND main_systemon IFND main_disabledos ************************************************************************* * Non OS loading and executing routines * ************************************************************************* dos_load: ;in: a0=Ptr to file name,a1=Ptr to address ; d0=Length clr.w dos_error st.b main_lock move.l d0,.savel move.w #$8200!%1000000,$dff096 ; Enable blitter DMA move.w #$8008,$dff09a ; Enable Ports Interrupt move.l main_doshandler,a6 move.l #1005,d2 move.l a1,.oldd1 move.l a0,d1 jsr -30(a6) ; Open file tst.l d0 beq.s .error move.l .oldd1,d2 move.l d0,.oldd1 move.l d0,d1 move.l .savel,d3 jsr -42(a6) ; Read tst.l d0 beq.s .error move.l .oldd1,d1 jsr -36(a6) lea $dff000,a6 tst.b $02(a6) .wblit: btst #6,$02(a6) bne.s .wblit .w8: move.l $04(a6),d0 and.l #$1ff00,d0 cmp.l #$100*307,d0 bne.s .w8 move.w #%1000000,$96(a6) move.w #$0008,$9a(a6) clr.w main_lock rts .oldd1: dc.l 0 .savel: dc.l 0 .error: st.b dos_error move.w #15,main_trappedvector move.l dos_exitaddy,a0 clr.w main_lock jmp (a0) dos_execute: ;in: a0=Ptr to filename clr.w dos_error st.b main_lock move.w #$0040,$dff09c ; Clear Req bits move.w #$8200!%1000000,$dff096 ; Enable blitter DMA move.w #$8008,$dff09a ; Enable Ports Interrupt move.l main_doshandler,a6 ; Get dos handler moveq.l #0,d2 ; STD In=0 move.l main_conhandler,d3 ; STD Out=0 move.l a0,d1 ; File Name Ptr move.l #main_dataptr,d0 bsr.w dos_writeaddy jsr -222(a6) ; DOS execute lea $dff000,a6 tst.b $02(a6) .wblit: btst #6,$02(a6) bne.s .wblit .w8: move.l $04(a6),d0 and.l #$1ff00,d0 cmp.l #$100*307,d0 bne.s .w8 move.w #$7de0,$96(a6) move.w #$0008,$9a(a6) clr.w main_lock cmp.l #'EXIT',main_returnvalue beq.w .exit cmp.l #'OK!!',main_returnvalue bne.s .error clr.l main_returnvalue rts .error: st.b dos_error move.w #15,main_trappedvector .exit: move.l dos_exitaddy,a0 jmp (a0) dos_exitcp: rts dos_exitaddy: dc.l dos_exitcp dos_error: dc.w 0 dos_writeaddy:; in: d0=addy move.w #$e000,$dff106 move.b d0,$dff181 lsr.l #8,d0 move.b d0,$dff183 lsr.l #8,d0 move.b d0,$dff185 lsr.l #8,d0 move.b d0,$dff187 rts dos_readaddy:; out: d0=addy move.w #$0100,$dff104 move.w #$e000,$dff106 move.b $dff187,d0 lsl.l #8,d0 move.b $dff185,d0 lsl.l #8,d0 move.b $dff183,d0 lsl.l #8,d0 move.b $dff181,d0 move.w #$0000,$dff104 rts ENDIF ; main_disabledos ENDIF ; main_systemon main_dataptr: dc.l main_infoblock ; Ptr to info block ; NEVER CHANGE ANY POSITIONS IN DATA FROM HERE. main_datablockstart: main_returnvalue:dc.l 0 ;-8 ; Return value main_idcode: dc.l 'TBL.' ;-4 ; TBL id code main_infoblock: ;------------------------- Info block - (External data ptrs) -- main_counter: dc.l 0 ;0 ; Main counter (Up 1/VBL) counter: dc.l 0 ;4 ; Counter (Up 1/VBL) timer: dc.l 0 ;8 ; Timer (Down 1/VBL) main_timer: dc.l 0 ;12 ; Main timer main_vblint: dc.l 0 ;16 ; Custom VBL int ptr main_vblint2: dc.l 0 ;20 ; Custom VBL int ptr main_bltint: dc.l 0 ;24 ; Custom BLT int ptr main_copint: dc.l 0 ;28 ; Custom COP int ptr main_module: dc.l -1 ;32 ; Module ptr main_lock: dc.w 0,0 ;36 ; 0=Ok 2 exit,Other NOT ok. IFND main_loader main_stimerptr: dc.l main_starttimer ;40 ; Code ptr for start timer main_gtimerptr: dc.l main_gettimer ;44 ; Code ptr for get timer ENDIF IFD main_loader main_stimerptr: dc.l 0 ;40 ; Code ptr for start timer main_gtimerptr: dc.l 0 ;44 ; Code ptr for get timer ENDIF main_framespeed:dc.l 0 ; 48 ; Frames speed main_exitaddy: dc.l main_exit ; 52 main_trappedvector:dc.w 0,0 ; 56 ; #of trapped vector main_doshandler:dc.l 0 ; 60 ; Dos handler main_conhandler:dc.l 0 ; 64 ; Console handler main_datablockend: ; TO HERE !!! IF SO SYSTEM CRASHES WILL APPEND. main_vbrbase: dc.l 0 ; VBR Base main_oldsp: dc.l 0 ; Saved SP (For exit) ******************************************************************************** IFND main_loader main_starttimer:move.l main_dataptr,a0 move.l (a0),main_savecount move.l $dff004,main_savecount2 rts main_gettimer: move.l main_dataptr,a0 move.l (a0),d0 move.l $dff004,d1 move.l main_savecount,d2 move.l main_savecount2,d3 and.l #$1ffff,d1 and.l #$1ffff,d3 sub.l d3,d1 sub.l d2,d0 mulu #313,d0 lsl.l #8,d0 add.l d1,d0 lsr.l #1,d0 move.l d0,main_timer2 rts ************************************************************************* * OS related routines * ************************************************************************* main_sysinit: move.l a7,main_errsp ; Error sp move.l #main_nodoslib,main_erraddy;Error addy tst.b (a0) bne.s .noclistart st.b .clistartflag .noclistart: IFND main_short tst.w d0 beq.s .skippa move.l a0,main_argv ; Save arguments clr.b -1(a0,d0.w) bsr.w main_getargs ENDIF .skippa: lea main_doslibname,a1 ; Ptr to "dos.library\0" move.l $4,a6 ; Exec lib handler jsr -408(a6) ; Exec Open lib "dos.library" tst.l d0 ; 0=Error beq.w main_error ; Handle error move.l main_dataptr,a0 move.l d0,60(a0) ; main_doshandler Save dos handler tst.w .clistartflag beq.s .clistart move.l #main_closedos,main_erraddy; Error addy move.l #main_consolname,d1 ; Window name (Consol) move.l #$3ed,d2 ; Open mode (New) move.l main_dataptr,a6 move.l 60(a6),a6 ; main_doshandler,a6 Get dos handler jsr -30(a6) ; Dos open file tst.l d0 ; Error ? =0 beq.s .otherstart ; No con openend st.b main_printok ; Set print & con flag st.b main_conuse move.l main_dataptr,a0 move.l d0,64(a0) ; main_conhandler ; Con handler=Outp Handler bra.w .otherstart ; Skip Cli start .clistart: move.l main_dataptr,a6 move.l 60(a6),a6 ; main_doshandler,a6 Get doshandler jsr -60(a6) ; Dos get current output tst.l d0 ; Error ? beq.s .otherstart ; Yes don't set flags not.b main_printok ; Set print flag move.l main_dataptr,a0 move.l d0,64(a0) ; main_conhandler ; Output handler .otherstart: IFND main_skipsysinfo bsr.w main_sysinfo ; Get system info ENDIF move.l #main_dealloc,main_erraddy;Error addy IFND main_debugoff IFND main_systemon move.l $4.w,a6 ; Exec base address move.l #16384,d0 ; Reserve one bpl moveq.l #0,d1 ; must be in chipram bset #16,d1 jsr -198(a6) ; Exec allocmem move.l d0,kbd_macroptr move.l #20480+4096,d0 ; Reserve one bpl moveq.l #2,d1 ; must be in chipram jsr -198(a6) ; Exec allocmem move.l d0,main_configscr ; Save adress tst.l d0 beq.s .skippascr lea main_conbplptrs+2,a0 ; Ptr to bplptrs move.w d0,4(a0) ; Set ... swap.w d0 ; .. bpl.. move.w d0,(a0) ; ..ptrs swap.w d0 ; Clear... move.l d0,a0 add.l #20480,d0 ; Ptr to null sprite lea main_consprptr+2,a1 move.l d0,d1 add.l #44+8,d1 swap.w d1 move.w d1,(a1) swap.w d1 move.w d1,4(a1) addq.l #8,a1 moveq.l #6,d1 .sprloop: tst.w d1 bne.s .skipspr addq.l #8,d0 .skipspr: swap.w d0 move.w d0,(a1) swap.w d0 move.w d0,4(a1) addq.l #8,a1 dbra d1,.sprloop move.l d0,main_mousesprptr move.l d0,a2 lea main_mousesprite,a1 moveq.l #2*44/4-1,d0 .copysprloop: move.l (a1)+,(a2)+ dbra d0,.copysprloop moveq.l #0,d0 move.w #(20480+8)/4-1,d1 .clrbloop: move.l d0,(a0)+ dbra d1,.clrbloop ;..screen .skippascr: ENDIF ENDIF bra.w main_sysstartupok .clistartflag: dc.w 0 IFND main_short main_print: ;a0=ptr to text (0 to end) movem.l d0-a6,-(a7) IFND main_dostextoff tst.b main_printok ; Ok to print ? beq.s .skip ; Nope... moveq.l #0,d3 ; Calc.. move.l a0,a1 .calcloop: tst.b (a1)+ beq.s .calcok addq.l #1,d3 bra.s .calcloop ;..str length .calcok: tst.l d3 ; Length 0 ? beq.s .skip ; Nothing to print move.l a0,d2 : Buffer ptr move.l main_dataptr,a0 move.l 64(a0),d1 ; main_conhandler,d1 ; Get File handler move.l main_dataptr,a6 move.l 60(a6),a6 ; main_doshandler,a6 ; Get dos handler jsr -48(a6) ; Dos write file .skip: ENDIF movem.l (a7)+,d0-a6 rts ENDIF main_error: move.l main_erraddy,a0 move.l main_errsp,a7 jmp (a0) IFND main_short main_getargs: moveq.l #0,d6 lea main_arglist,a3 moveq.l #15,d7 .loop: bsr.w .getarg tst.l d0 beq.s .exit move.l a1,(a3)+ addq.l #1,d6 dbra d7,.loop .exit: move.l d6,main_argcount rts .getarg: .findloop: move.b (a0)+,d0 beq.s .rts cmp.b #32,d0 bls.s .findloop cmp.b #"'",d0 beq.s .quote cmp.b #"`",d0 beq.s .quote cmp.b #'"',d0 beq.s .quote move.l a0,a1 subq.l #1,a1 ; a1=Ptr .noquote: cmp.b #32,(a0)+ bhi.s .noquote tst.b -1(a0) beq.s .lastarg clr.b -1(a0) moveq.l #-1,d0 rts .quote: move.l a0,a1 ; a1=Ptr .findq: move.b (a0)+,d0 cmp.b #32,d0 blo.s .exitq cmp.b #"'",d0 beq.s .exitq cmp.b #"`",d0 beq.s .exitq cmp.b #'"',d0 bne.s .findq .exitq: tst.b -1(a0) beq.s .lastarg clr.b -1(a0) moveq.l #-1,d0 rts .lastarg: clr.b (a0) ; Last arg moveq.l #-1,d0 rts .rts: moveq.l #0,d0 ; d0=0 ==> No more args rts main_copymem: ;a0=Source ;a1=Dest ;d0=Size in bytes divu #11*8,d0 ; d0=Size/12*8 beq.s .skiplong subq.w #1,d0 moveq.l #11*4,d1 sub.l d1,a1 .longloop: REPT 2 movem.l (a0)+,d2-d7/a2-a6 add.l d1,a1 movem.l d2-d7/a2-a6,(a1) ENDR dbra d0,.longloop add.l d1,a1 .skiplong: clr.w d0 swap.w d0 divu #4,d0 beq.s .skiplongword subq.w #1,d0 .longwordloop: move.l (a0)+,(a1)+ dbra d0,.longwordloop .skiplongword: swap.w d0 tst.w d0 beq.s .skipbytes subq.w #1,d0 .byteloop: move.b (a0)+,(a1)+ dbra d0,.byteloop .skipbytes: rts ENDIF IFND main_skipsysinfo main_sysinfo: ;----------------------------------------------- Get processors -- move.l $4,a6 ; Exec base move.b 531(a6),d0 move.b d0,main_powerfreq+1 cmp.b #50,d0 beq.w .powok IFD main_textvaron move.l #main_txtpow60,main_powptr ENDIF .powok: move.w 296(a6),d0 ; Get system flags btst #0,d0 ; 010? beq.s .no010 ; Nope move.w #1,main_processor ; Yepp write proc number IFD main_textvaron move.l #main_txt68010,main_procptr ; Set text ptr ENDIF .no010: btst #1,d0 ; 020? beq.s .no020 ; Nope move.w #2,main_processor ; Yepp write proc number IFD main_textvaron move.l #main_txt68020,main_procptr ; Set text ptr ENDIF .no020: btst #2,d0 ; 030? beq.s .no030 ; Nope move.w #3,main_processor ; Yepp write proc number IFD main_textvaron move.l #main_txt68030,main_procptr ; Set text ptr ENDIF .no030: btst #4,d0 ; 881? beq.s .no881 ; Nope move.w #1,main_coproc ; Yepp write coproc number IFD main_textvaron move.l #main_txt68881,main_coprocptr ; Set text ptr ENDIF .no881: btst #5,d0 ; 882? beq.s .no882 ; Nope move.w #1,main_coproc ; Yepp write coproc number IFD main_textvaron move.l #main_txt68882,main_coprocptr ; Set text ptr ENDIF .no882: btst #3,d0 ; 040? beq.s .no040 ; Nope move.w #4,main_processor ; Yepp write proc number IFD main_textvaron move.l #main_txt68040,main_procptr ; Set text ptr ENDIF move.w #1,main_coproc ; 040 built in IFD main_textvaron move.l #main_txt68040b,main_coprocptr ; Set text ptr ENDIF .no040: btst #7,d0 ; 060? beq.s .no060 ; Nope move.w #6,main_processor ; Yepp write proc number IFD main_textvaron move.l #main_txt68060,main_procptr ; Set text ptr ENDIF move.w #1,main_coproc ; 060 built in IFD main_textvaron move.l #main_txt68060b,main_coprocptr ; Set text ptr ENDIF .no060: btst #6,d0 ; 851? beq.s .no851 ; Nope move.w #1,main_mmu ; Yepp write mmu IFD main_textvaron move.l #main_txt68851,main_mmuptr ; Set text ptr ENDIF .no851:;------------------------------------------------------- Get gfx chip -- lea $dff07d,a0 ; LisaID move.b (a0),d0 move.b d0,d1 moveq.l #63,d2 .gfxloop: and.b (a0),d1 dbra d2,.gfxloop cmp.b d1,d0 bne.s .orgdenise btst #1,d0 bne.s .noecs move.w #1,main_ecs IFD main_textvaron move.l #main_txtgfxecs,main_gfxptr ENDIF .noecs: btst #2,d0 bne.s .noaga move.w #1,main_aga IFD main_textvaron move.l #main_txtgfxaga,main_gfxptr ENDIF .noaga: .orgdenise: move.l $4,a0 move.b 530(a0),d0 move.b d0,main_refresh+1 cmp.b #50,d0 beq.w .refok IFD main_textvaron move.l #main_txtvbl60,main_refreshptr ENDIF .refok:;--------------------------------------------------------- Get memory -- move.l $4,a6 ; Exec base move.l 62(a6),main_chipmem moveq.l #4,d1 bset #19,d1 jsr -216(a6) move.l d0,d6 bra.s .okmem move.l d0,-(a7) ; Save mem moveq.l #0,d1 moveq.l #16,d0 jsr -198(a6) tst.l d0 beq.s .dotest move.l d0,-(a7) moveq.l #4,d1 bset #19,d1 jsr -216(a6) move.l (a7)+,a1 move.l d0,-(a7) moveq.l #16,d0 jsr -210(a6) move.l (a7)+,d0 move.l (a7)+,d1 bne.s .dotest moveq.l #4,d1 bset #19,d1 jsr -216(a6) move.l d0,d6 bra.s .okmem .dotest: sub.l a1,a1 moveq.l #31,d7 ; Number of banks moveq.l #0,d6 ; Fast mem found move.l #512*1024,d5 ; Bank size .findloop: movem.l d5-a1,-(a7) jsr -534(a6) movem.l (a7)+,d5-a1 btst #0,d0 ; Is it fast mem ? beq.s .memskip add.l d5,d6 .memskip: add.l d5,a1 dbra d7,.findloop .okmem: move.l d6,main_fastmem moveq.l #0,d0 moveq.l #2,d1 bset #17,d1 jsr -216(a6) move.l d0,main_availchip moveq.l #0,d0 moveq.l #4,d1 bset #17,d1 jsr -216(a6) move.l d0,main_availfast rts ENDIF IFND main_skipsysinfo main_showsysinfo: IFND main_sysinfooff lea main_txthi,a0 bsr.w main_print lea main_txtpower,a0 bsr.w main_print move.l main_powptr,a0 bsr.w main_print lea main_txtproc,a0 bsr.w main_print move.l main_procptr,a0 bsr.w main_print lea main_txtcoproc,a0 bsr.w main_print move.l main_coprocptr,a0 bsr.w main_print lea main_txtmmu,a0 bsr.w main_print move.l main_mmuptr,a0 bsr.w main_print lea main_txtaga,a0 bsr.w main_print move.l main_gfxptr,a0 bsr.w main_print lea main_txtvbl,a0 bsr.w main_print move.l main_refreshptr,a0 bsr.w main_print lea main_txtmemchip,a0 bsr.w main_print move.l main_chipmem,d0 lsr.l #8,d0 lsr.l #2,d0 bsr.w main_printdec lea main_txtmemfast,a0 bsr.w main_print move.l main_fastmem,d0 lsr.l #8,d0 lsr.l #2,d0 bsr.w main_printdec lea main_txtkblf,a0 bsr.w main_print ENDIF rts ENDIF IFND main_skipsysinfo main_checkreq: moveq.l #0,d7 ; Nothing checked moveq.l #0,d6 ; 0 If passed IFND main_reqinfooff lea main_txtreq,a0 bsr.w main_print ENDIF IFD main_reqproc IFND main_reqinfooff lea main_txtproc,a0 bsr.w main_print ENDIF move.w #main_reqproc,d0 mulu #6,d0 add.l #main_txt68000,d0 move.l d0,a0 IFND main_reqinfooff bsr.w main_print lea main_txtplus,a0 bsr.w main_print ENDIF lea main_txtpassed,a0 cmp.w #main_reqproc,main_processor bge.s .ok00 moveq.l #-1,d6 lea main_txtfault,a0 .ok00: IFND main_reqinfooff bsr.w main_print ENDIF moveq.l #1,d7 ENDIF IFD main_reqfpu IFND main_reqinfooff lea main_txtcoproc,a0 bsr.w main_print ENDIF lea main_txtpassed,a0 tst.w main_coproc bne.s .ok01 moveq.l #-1,d6 lea main_txtfault,a0 .ok01: IFND main_reqinfooff bsr.w main_print ENDIF moveq.l #1,d7 ENDIF IFD main_reqfpu IFND main_reqinfooff lea main_txtmmu,a0 bsr.w main_print ENDIF lea main_txtpassed,a0 tst.w main_mmu bne.s .ok02 moveq.l #-1,d6 lea main_txtfault,a0 .ok02: IFND main_reqinfooff bsr.w main_print ENDIF moveq.l #1,d7 ENDIF ;MEM IFD main_reqfast IFND main_reqinfooff lea main_txtfast,a0 bsr.w main_print move.l #main_reqfast,d0 bsr.w main_printdec lea main_txtkb,a0 bsr.w main_print ENDIF lea main_txtpassed,a0 cmp.l #main_reqfast*1024,main_availfast bhs.s .ok00a moveq.l #-1,d6 lea main_txtfault,a0 .ok00a: IFND main_reqinfooff bsr.w main_print ENDIF moveq.l #1,d7 ENDIF IFD main_reqchip IFND main_reqinfooff lea main_txtchip,a0 bsr.w main_print move.l #main_reqchip,d0 bsr.w main_printdec lea main_txtkb,a0 bsr.w main_print ENDIF lea main_txtpassed,a0 cmp.l #main_reqchip*1024,main_availchip bhs.s .ok00b moveq.l #-1,d6 lea main_txtfault,a0 .ok00b: IFND main_reqinfooff bsr.w main_print ENDIF moveq.l #1,d7 ENDIF IFD main_reqaga IFND main_reqinfooff lea main_txtaga,a0 bsr.w main_print lea main_txtagaplus,a0 bsr.w main_print ENDIF lea main_txtpassed,a0 tst.w main_aga bne.s .ok03 moveq.l #-1,d6 lea main_txtfault,a0 .ok03: IFND main_reqinfooff bsr.w main_print ENDIF moveq.l #1,d7 ENDIF IFD main_reqecs IFND main_reqaga IFND main_reqinfooff lea main_txtaga,a0 bsr.w main_print lea main_txtecsplus,a0 bsr.w main_print ENDIF lea main_txtpassed,a0 tst.w main_ecs bne.s .ok04 moveq.l #-1,d6 lea main_txtfault,a0 .ok04: IFND main_reqinfooff bsr.w main_print ENDIF moveq.l #1,d7 ENDIF ENDIF IFD main_reqpal IFND main_reqinfooff lea main_txtvbl,a0 bsr.w main_print lea main_txtvbl50,a0 bsr.w main_print ENDIF lea main_txtpassed,a0 cmp.w #50,main_refresh beq.s .ok05 moveq.l #-1,d6 lea main_txtfault,a0 .ok05: IFND main_reqinfooff bsr.w main_print ENDIF moveq.l #1,d7 ENDIF IFD main_reqntsc IFND main_reqpal IFND main_reqinfooff lea main_txtvbl,a0 bsr.w main_print lea main_txtvbl60,a0 bsr.w main_print ENDIF lea main_txtpassed,a0 cmp.w #60,main_refresh beq.s .ok06 moveq.l #-1,d6 lea main_txtfault,a0 .ok06: IFND main_reqinfooff bsr.w main_print ENDIF moveq.l #1,d7 ENDIF ENDIF tst.l d7 bne.s .skip IFND main_reqinfooff lea main_txtnoreq,a0 bsr.w main_print ENDIF rts .skip: IFD main_textvaron lea main_txtreqpass,a0 ENDIF tst.w d6 beq.s .ok IFD main_textvaron lea main_txtreqfault,a0 ENDIF IFND main_systemon move.l main_dataptr,a1 move.w #11,56(a1) ; main_trappedvector ENDIF .ok: move.w d6,main_ok2run IFND main_reqinfooff bsr.w main_print IFD main_systemon lea main_txtblank,a0 bsr.w main_print ENDIF ENDIF rts ENDIF IFND main_short main_printdec: ;in: d0=Number IFND main_dostextoff lea main_txtdec,a0 move.l a0,a1 move.l a1,a2 moveq.l #0,d1 .loop: divu #10,d0 swap.w d0 add.b #48,d0 addq.l #1,d1 move.b d0,(a2)+ clr.w d0 swap.w d0 tst.l d0 bne.s .loop .ok: move.b #0,(a2) asr.w #1,d1 tst.w d1 beq.s .skipp subq.w #1,d1 .sloop: move.b (a1),d0 move.b -(a2),(a1)+ move.b d0,(a2) dbra d1,.sloop .skipp: bra.w main_print ENDIF rts ENDIF main_turncacheoff: dc.l $4e7a1002 ;movec cacr,d1 move.l d1,main_cachereg rte main_turncacheon: move.l main_cachereg,d0 dc.l $4e7b0002 ;movec d0,cacr rte IFND main_systemon ; End almost at ottom of source IFND main_endinfooff IFND main_skipsysinfo main_exitmsg: lea main_txtendc,a0 bsr.w main_print move.l main_dataptr,a0 move.w 56(a0),d0 ; main_trappedvector,d0 lsl.w #3,d0 lea main_vectorlist,a0 move.l (a0,d0.w),a0 bsr.w main_print lea main_txtafter,a0 bsr.w main_print move.l main_counter2,d0 divu main_powerfreq,d0 swap.w d0 clr.w d0 swap.w d0 ; d0=#of seconds divu #60,d0 swap.w d0 move.w d0,d1 clr.w d0 swap.w d0 ; d0=#of mins swap.w d1 clr.w d1 swap.w d1 ; d1=#of secs mod 60 exg.l d0,d1 moveq.l #0,d7 tst.w d1 beq.s .skipmin move.l d0,-(a7) move.l d1,d0 move.l d0,-(a7) bsr.w main_printdec ; Write mins move.l (a7)+,d0 lea main_txtminute,a0 cmp.l #1,d0 beq.s .skipmins lea main_txtminutes,a0 .skipmins: bsr.w main_print move.l (a7)+,d0 beq.s .skipmin move.l d0,-(a7) lea main_txtand,a0 bsr.w main_print move.l (a7)+,d0 moveq.l #-1,d7 .skipmin: tst.w d0 beq.s .skipsec move.l d0,-(a7) bsr.w main_printdec ; Write secs move.l (a7)+,d0 lea main_txtsecond,a0 cmp.l #1,d0 beq.s .skipsecs lea main_txtseconds,a0 .skipsecs: move.l d0,-(a7) bsr.w main_print move.l (a7)+,d0 .skipsec: tst.l d0 bne.s .ok1 tst.l d7 bne.s .ok1 lea main_txtnonetime,a0 bsr.w main_print .ok1: lea main_txtend,a0 bsr.w main_print rts ENDIF ENDIF ************************************************************************* * Disable/Restore OS routines * ************************************************************************* main_disablesystem:;---------------------------- Get VBR and turn caches off -- move.l $4,a6 ; Exec base tst.b 297(a6) ; Test processor flags beq.s .novbr ; No vbr = 68000 lea main_getvbr,a5 ; Pytr to supervisor routine jsr -30(a6) ; Supervisor IFD main_cacheoff btst.b #0,297(a6) ; Test 68010 flag bne.s .novbr ; 68010 has no cache move.w #1,main_cacheok ; Set flag lea main_turncacheoff,a5 ; Ptr to supervisor routine jsr -30(a6) ; Supervisor lea main_txtcache,a0 ; Write message bsr.w main_print ENDIF .novbr:;--------------------------------------- Open GFX lib and save stuff -- lea main_gfxlibname,a1 ; Ptr to gfxlib name jsr -408(a6) ; Open gfx lib tst.l d0 ; Error? beq.w main_error ; Yepp :( move.l d0,main_gfxhandler ; Save base move.l d0,a6 ; Gfx base ptr move.l $22(a6),main_oldactscreen ; Screen ptr move.l $26(a6),main_oldcopper1 ; Save oldcopper1 move.l $32(a6),main_oldcopper2 ; Save oldcopper2 move.l a6,-(a7) lea $dff000,a6 ; Custom base address tst.b $02(a6) ; Used for OLD agnus bug .waitblit: btst #6,$02(a6) ; Test BLTBSY bne.s .waitblit ; blitter isn't finnished move.w $1c(a6),main_oldintena ; Save intena move.w $10(a6),main_oldadkcon ; Save adkcon bits move.w #$7fff,$9a(a6) ; Disable ALL interrupts IFND main_short bsr.w main_fadeoutwb ENDIF move.l (a7)+,a6 sub.l a1,a1 ; Clear a1 jsr -222(a6) ; Load View jsr -270(a6) ; WaitTOF jsr -270(a6) ; WaitTOF move.b $ec(a6),d0 ; Get chip rev no and.b #$03,d0 ; ECS ? beq.s .noECS ; ECS not found move.l 370(a6),a2 move.w $28(a2),main_oldbeamcon ; Save beam control .noECS:;------------------------------------------------- Save DMA and Stuff -- lea $dff000,a6 ; Custom base address move.w $1e(a6),main_oldintreq ; Save intreq move.w #$7fff,$9e(a6) ; Disable ALL interrupt reqs move.w $2(a6),main_olddmacon ; Save old dma con bsr.w main_storevectors ; Save system vectors tst.b $02(a6) ; Used for OLD agnus bug .waitblit1: btst #6,$02(a6) ; Test BLTBSY bne.s .waitblit1 ; blitter isn't finnished .waitvbl: move.l $04(a6),d0 ; Get Rast pos and.l #$1ff00,d0 ; Mask out vertical bits cmp.l #301*256,d0 ; Wait row bne.s .waitvbl ; Not reached move.w #$7fff,$96(a6) ; disable ALL dma move.w #$0020,$1dc(a6) ; Normal view mode .waitvbl1: move.l $04(a6),d0 ; Get Rast pos and.l #$1ff00,d0 ; Mask out vertical bits cmp.l #300*256,d0 ; Wait row bne.s .waitvbl1 ; Not reached lea $140(a6),a5 moveq.l #$10,d1 moveq.l #$7,d2 moveq.l #0,d3 .sprclloop: move.l d3,(a5) add.l d1,a5 dbra d2,.sprclloop Move.b #0,$DE0000 ; ramsey IFND main_disableint move.w #$c020,$9a(a6) ; Enable level 3 int ENDIF move.b $bfe001,main_oldbfe001 bset.b #1,$bfe001 rts main_oldbfe001: dc.w 0 main_restoresystem:;---------------------------------------- Restore DMA etc -- IFND main_playeroff main_musicstop ENDIF move.b main_oldbfe001,d0 btst #1,d0 bne.s .skipled bclr.b #1,$bfe001 .skipled: IFND main_short bsr.w main_fadeinwbfix ENDIF lea $dff000,a6 ; Custom base move.w #$7fff,$9a(a6) ; Disable all interrupts intena tst.b $02(a6) ; OLD agnus bug .waitblit: btst #6,$02(a6) ; Test BLTBSY bne.s .waitblit ; Blitter not finnished .waitvbl: move.l $04(a6),d0 ; Get Rast pos and.l #$1ff00,d0 ; Mask out vertical bits cmp.l #301*256,d0 ; Wait row bne.s .waitvbl ; Not reached move.w #$7fff,$96(a6) ; Clear ALL DMA move.l #$7fff7fff,$9c(a6) ; Clear INTREQ & ADKCON or.w #$8000,main_oldadkcon ; Set set bit or.w #$c000,main_oldintena ; Set set bit or.w #$8000,main_oldintreq ; Set set bit or.w #$8200,main_olddmacon ; Set set bit bsr.w main_restorevectors ; Restore system vectors .waitvbl2: move.l $04(a6),d0 ; Get Rast pos and.l #$1ff00,d0 ; Mask out vertical bits cmp.l #300*256,d0 ; Wait row bne.s .waitvbl2 ; Not reached move.w main_olddmacon,$96(a6) ; Restore DMA move.w main_oldadkcon,$9e(a6) ; Restore ADKCON move.w main_oldintena,$9a(a6) ; Restore INTENA move.w main_oldintreq,$9c(a6) ; Restore INTREQ move.l main_oldcopper1,$80(a6) ; Restore system copper 1 move.l main_oldcopper2,$84(a6) ; Restore system copper 2 move.w #0,$88(a6) ; Strobe copper ;--------------------------------------------------- Fix view & close doslib -- move.l main_gfxhandler,a6 ; Get GFXlib handler move.l main_oldactscreen,a1 ; Get actscreen jsr -222(a6) ; Set system View jsr -270(a6) ; WaitTOF jsr -270(a6) ; WaitTOF move.l a6,a1 ; Gfx handler move.l $4,a6 ; Exec base jsr -414(a6) ; Exec close lib IFND main_short bsr.w main_fadeinwb ENDIF rts IFND main_short IFND main_rgbfadeto main_rgbfadeto = $000 ENDIF IFND main_rgbfadefrom main_rgbfadefrom= $000 ENDIF main_fadeoutwb: IFND main_faderoff move.l main_oldcopper1,a0 moveq.l #0,d0 bsr.w .loop move.l main_oldcopper2,a0 bsr.w .loop move.l d0,main_wbcolours mulu #6,d0 ; #of bytes to reserve !! move.l $4.w,a6 ; Exec base address moveq.l #0,d1 jsr -198(a6) ; Exec allocmem move.l d0,main_wbaddress tst.l d0 beq.w .skip move.l d0,a1 move.l main_oldcopper1,a0 bsr.w .loop2 move.l main_oldcopper2,a0 bsr.w .loop2 moveq.l #$f,d0 .fadeloop: move.l main_wbcolours,d1 subq.w #1,d1 move.l main_wbaddress,a0 .sync: move.l $dff004,d2 and.l #$1ff00,d2 cmp.l #308*$100,d2 beq.s .sync .sync1: move.l $dff004,d2 and.l #$1ff00,d2 cmp.l #308*$100,d2 bne.s .sync1 .colloop: move.w (a0)+,d2 move.w d2,d3 move.w d2,d4 move.w d2,d5 and.w #$f00,d3 lsr.w #8,d3 and.w #$f0,d4 lsr.w #4,d4 and.w #$f,d5 sub.w #(main_rgbfadeto&$f00)>>8,d3 sub.w #(main_rgbfadeto&$f0)>>4,d4 sub.w #(main_rgbfadeto&$f),d5 muls d0,d3 muls d0,d4 muls d0,d5 divs #$f,d3 divs #$f,d4 divs #$f,d5 add.w #(main_rgbfadeto&$f00)>>8,d3 add.w #(main_rgbfadeto&$f0)>>4,d4 add.w #(main_rgbfadeto&$f),d5 lsl.w #8,d3 lsl.w #4,d4 or.w d4,d3 or.w d5,d3 move.l (a0)+,a1 move.w d3,(a1) dbra d1,.colloop dbra d0,.fadeloop .skip: rts .loop: move.l (a0)+,d1 swap.w d1 cmp.l #$fffeffff,d1 beq.s .exit btst #0,d1 bne.s .loop cmp.w #$0088,d1 beq.s .exit cmp.w #$008a,d1 beq.s .exit cmp.w #$180,d1 blo.s .loop cmp.w #$1be,d1 bhi.s .loop addq.l #1,d0 bra.s .loop .exit: rts .loop2: move.l (a0)+,d1 swap.w d1 cmp.w #$ffff,d1 beq.s .exit2 btst #0,d1 bne.s .loop2 cmp.w #$0088,d1 beq.s .exit2 cmp.w #$008a,d1 beq.s .exit2 cmp.w #$180,d1 blo.s .loop2 cmp.w #$1be,d1 bhi.s .loop2 swap.w d1 move.w d1,(a1)+ subq.l #2,a0 move.l a0,(a1)+ addq.l #2,a0 bra.s .loop2 .exit2: ENDIF rts main_fadeinwb: IFND main_faderoff tst.l main_wbaddress beq.w .exit moveq.l #$f,d0 .fadeloop: move.l main_wbcolours,d1 subq.w #1,d1 move.l main_wbaddress,a0 .sync: move.l $dff004,d2 and.l #$1ff00,d2 cmp.l #308*$100,d2 beq.s .sync .sync1: move.l $dff004,d2 and.l #$1ff00,d2 cmp.l #308*$100,d2 bne.s .sync1 .colloop: move.w (a0)+,d2 move.w d2,d3 move.w d2,d4 move.w d2,d5 and.w #$f00,d3 lsr.w #8,d3 and.w #$f0,d4 lsr.w #4,d4 and.w #$f,d5 sub.w #(main_rgbfadefrom&$f00)>>8,d3 sub.w #(main_rgbfadefrom&$f0)>>4,d4 sub.w #(main_rgbfadefrom&$f),d5 move.w d0,d2 neg.w d2 add.w #$f,d2 muls d2,d3 muls d2,d4 muls d2,d5 divs #$f,d3 divs #$f,d4 divs #$f,d5 add.w #(main_rgbfadefrom&$f00)>>8,d3 add.w #(main_rgbfadefrom&$f0)>>4,d4 add.w #(main_rgbfadefrom&$f),d5 lsl.w #8,d3 lsl.w #4,d4 or.w d4,d3 or.w d5,d3 move.l (a0)+,a1 move.w d3,(a1) dbra d1,.colloop dbra d0,.fadeloop move.l main_wbaddress,a1 move.l main_wbcolours,d0 mulu #6,d0 move.l $4.w,a6 jsr -210(a6) .exit: ENDIF rts main_fadeinwbfix: IFND main_faderoff tst.l main_wbaddress beq.w .exit move.l main_wbcolours,d1 subq.w #1,d1 move.l main_wbaddress,a0 .sync: move.l $dff004,d2 and.l #$1ff00,d2 cmp.l #308*$100,d2 beq.s .sync .sync1: move.l $dff004,d2 and.l #$1ff00,d2 cmp.l #308*$100,d2 bne.s .sync1 .colloop: move.w (a0)+,d2 move.l (a0)+,a1 move.w #(main_rgbfadefrom&$f),(a1) dbra d1,.colloop .exit: ENDIF rts main_wbcolours: dc.l 0 main_wbaddress: dc.l 0 ENDIF main_storevectors: move.l main_vbrbase,a0 ; VBR base address move.l a0,a3 ; VBR base address addq.l #8,a0 ; Ptr to first vector lea main_oldvectors,a1 ; Ptr to old vectors IFND main_disableint lea .trapvcode,a2 ; Ptr to trap code ENDIF move.w #main_vectortrap,d1 ; Get vectors to trap moveq.l #9,d0 ; #of vectors .loop: move.l (a0)+,(a1)+ ; Save vector IFND main_disableint btst d0,d1 ; Trap vector ? beq.s .notrap ; Not ! move.l a2,-4(a0) ; Set new vector .notrap: add.l #.lenchk-.trapvcode,a2 ; Next trap vector code ENDIF dbra d0,.loop ; Next vector move.l a3,a0 ; First vector add.w #$64,a3 ; First int vector moveq.l #6,d0 ; 7 int vectors .intloop: move.l (a3)+,(a1)+ ; Save vector dbra d0,.intloop move.b $bfec01,main_lastkey IFND main_disableint move.l #main_level3int,$6c(a0) ; Set to our level 3 IFD main_trap7 move.l #main_level7int,$7c(a0) ; Set to our level 7 ENDIF ENDIF rts IFND main_disableint .trapvcode: move.l a0,-(a7) move.l main_dataptr,a0 move.w #1,56(a0) ; main_trappedvector move.l (a7)+,a0 .lenchk: jmp main_interrupt move.l a0,-(a7) move.l main_dataptr,a0 move.w #2,56(a0) ; main_trappedvector move.l (a7)+,a0 jmp main_interrupt move.l a0,-(a7) move.l main_dataptr,a0 move.w #3,56(a0) ; main_trappedvector move.l (a7)+,a0 jmp main_interrupt move.l a0,-(a7) move.l main_dataptr,a0 move.w #4,56(a0) ; main_trappedvector move.l (a7)+,a0 jmp main_interrupt move.l a0,-(a7) move.l main_dataptr,a0 move.w #5,56(a0) ; main_trappedvector move.l (a7)+,a0 jmp main_interrupt move.l a0,-(a7) move.l main_dataptr,a0 move.w #6,56(a0) ; main_trappedvector move.l (a7)+,a0 jmp main_interrupt move.l a0,-(a7) move.l main_dataptr,a0 move.w #7,56(a0) ; main_trappedvector move.l (a7)+,a0 jmp main_interrupt move.l a0,-(a7) move.l main_dataptr,a0 move.w #8,56(a0) ; main_trappedvector move.l (a7)+,a0 jmp main_interrupt move.l a0,-(a7) move.l main_dataptr,a0 move.w #9,56(a0) ; main_trappedvector move.l (a7)+,a0 jmp main_interrupt move.l a0,-(a7) move.l main_dataptr,a0 move.w #10,56(a0) ; main_trappedvector move.l (a7)+,a0 jmp main_interrupt ENDIF main_restorevectors: move.l main_vbrbase,a0 ; VBR base address move.l a0,a3 ; VBR base address addq.l #8,a0 ; Ptr to first vector lea main_oldvectors,a1 ; Ptr to old vectors moveq.l #9,d0 ; #of vectors .loop: move.l (a1)+,(a0)+ ; Restore vector dbra d0,.loop ; Next vector add.w #$64,a3 ; First in vector moveq.l #6,d0 ; 7 int vectors .intloop: move.l (a1)+,(a3)+ ; Save vector dbra d0,.intloop rts IFND main_disableint main_interrupt: IFND MAIN_DEBUGOFF jmp main_verticalint ENDIF IFD MAIN_DEBUGOFF move.l a0,.old move.l main_dataptr,a0 move.l 58(a0),$02(a7) ; Main_ExitAddy move.l .old,a0 rte .old: dc.l 0 ENDIF IFD main_trap7 main_level7int: move.l a0,-(a7) move.l main_vbrbase,a0 move.l #.rte,$7c(a0) move.l (a7)+,a0 .loop: cmp.l #main_level7int,$02(a7) beq.s .notok cmp.l #.rte,$02(a7) bne.s .ok .notok: addq.l #6,a7 bra.s .loop .ok: move.w #12,main_trappedvector .loop2: cmp.l #main_level7int,$02(a7) beq.s .notok2 cmp.l #.rte,$02(a7) bne.s .ok2 .notok2: addq.l #6,a7 bra.s .loop2 .ok2: jmp main_interrupt .rte: rte ENDIF ************************************************************************* * Interrupt related routines * ************************************************************************* main_level3int: btst.b #4,$dff01f ; COP int ? bne.s main_copperint ; Yes btst.b #5,$dff01f ; VBL int ? bne.s main_verticalint ; Yes btst.b #6,$dff01f ; BLT int ? bne.s main_blitterint ; Yes rte ; ????? main_copperint: movem.l d0-a6,-(a7) move.l main_dataptr,a0 move.l 28(a0),a0 ; Get COPint ptr cmp.l #0,a0 beq.s .noint jsr (a0) .noint: movem.l (a7)+,d0-a6 move.w #$0010,$dff09c ; Clear REQ bits rte main_blitterint:movem.l d0-a6,-(a7) move.l main_dataptr,a0 move.l 24(a0),a0 ; Get BLTInt ptr cmp.l #0,a0 beq.s .noint jsr (a0) .noint: movem.l (a7)+,d0-a6 move.w #$0040,$dff09c ; Clear REQ bits rte main_verticalint: tst.w main_novbl bne.w .noclose move.l a7,main_registers+15*4 ; Save SP lea main_registers+15*4,a7 ; Register ptr movem.l d0-a6,-15*4(a7) move.l (a7),a7 ; Restore SP move.w (a7),main_usersr ; Save SR move.l 2(a7),main_userpc ; Save user PC .skippr: movem.l d0-a6,-(a7) ; Save registers IFND main_debugoff tst.w main_configscreen ; Is configscreen up ? bne.w .configint ; Yes do special config int ENDIF tst.w main_forcedebug bne.w .forcedebug move.l main_dataptr,a0 tst.w 56(a0) ; main_trappedvector bne.w .forcedebug IFND main_noexit IFD main_usermb clr.w main_readakey btst #2,$dff016 ; Right mouse buttom ? beq.w .forcedebug ; Yepp... ENDIF IFD main_uselmb clr.w main_readakey btst #6,$bfe001 ; Left mouse buttom ? beq.s .forcedebug ; Yepp... ENDIF ENDIF IFND main_debugoff tst.w main_contrace bne.w .forcedebug ENDIF .continue: move.l main_dataptr,a0 addq.l #1,(a0) ; Increase main counter addq.l #1,4(a0) ; Increase counter addq.l #1,main_counter2 tst.l 8(a0) ; Timer countdown? beq.s .nodectimer ; Nopie.. subq.l #1,8(a0) ; Decrease timer .nodectimer: tst.l 12(a0) ; main_Timer countdown? beq.s .nodectimer1 ; Nopie.. subq.l #1,12(a0) ; Decrease main_timer .nodectimer1: move.l 16(a0),d0 ; Get VBLint beq.s .skipcustom move.l d0,a0 jsr (a0) .skipcustom: move.l main_dataptr,a0 move.l 20(a0),d0 ; Get VBLInt2 beq.s .skipcustom2 move.l d0,a0 jsr (a0) .skipcustom2: ;------------------------------------------- Music stuff -- IFND main_playeroff tst.w main_play beq .noplay main_musicplay .noplay: move.l main_dataptr,a0 move.l 32(a0),d0 ; Get MAIN_MOdule beq.s .stopmusic cmp.l #-1,32(a0) beq.s .skipmusic move.l d0,a0 sub.l a1,a1 main_musicinit move.l main_dataptr,a0 move.l #-1,32(a0) ; Clear main_module st.b main_play bra.s .skipmusic .stopmusic: main_musicstop move.l main_dataptr,a0 move.l #-1,32(a0) .skipmusic: ENDIF ;----------------------------------------------- Music end -- IFND main_meteroff bsr.w main_frameint ENDIF .exitint: IFD main_length tst.l main_timer bne.s .skipquit move.l #main_exit,main_userpc .skipquit: ENDIF movem.l (a7)+,d0-a6 ; Restore registers move.l main_userpc,2(a7) ; Restore PC IFND main_debugoff tst.w main_configexit ; Close config ? beq.s .noclose ; Nopie... move.w #0,main_configexit ; Clear flag move.w #0,main_configscreen ; Clear flag move.w main_configsr,(a7) ; Restore SR move.l main_configpc,2(a7) ; Restore PC move.l a7,main_configregs+15*4 ; Save sp lea main_configregs+15*4,a7 ; Ptr to saved registers movem.l -15*4(a7),d0-a6 move.l (a7),a7 ENDIF move.l a0,-(a7) move.l main_vbrbase,a0 IFD main_trap7 move.l #main_level7int,$7c(a0) ENDIF move.l (a7)+,a0 .noclose: move.w #$0020,$dff09c ; Clear REQ bits rte ;------------------------------------ Force debug mode -- .forcedebug: move.l main_dataptr,a0 tst.w 36(a0) beq.s .ok2exit st.b main_forcedebug bra.w .continue .ok2exit: cmp.w #14,56(a0) ; main_trappedvector bge.w .continue clr.w main_forcedebug IFD main_debugoff move.l main_dataptr,a0 tst.l 52(a0) ; main_exitaddy beq.w .continue move.l 52(a0),main_userpc ; main_exitaddy bra.s .exitint ENDIF IFND main_debugoff st.b main_configscreen ; Set flag move.w main_usersr,main_configsr; Save for later exit move.l main_userpc,main_configpc; Save for later exit move.l #main_config,main_userpc; Run config routine lea main_registers,a0 ; Save... lea main_configregs,a1 moveq.l #15,d0 .saveregloop: move.l (a0)+,(a1)+ dbra d0,.saveregloop ;...registers ENDIF .configint: IFND main_debugoff tst.w main_contrace bne.s .trace lea main_configcop,a0 lea $dff000,a6 .conloop: move.l (a0)+,d0 cmp.l #-2,d0 beq.s .conexit move.w d0,d1 swap.w d0 move.w d1,(a6,d0.w) bra.s .conloop .conexit: bsr.w main_mousemove addq.l #1,main_concounter moveq.l #0,d0 moveq.l #0,d1 move.w main_concurx,d0 lsl.w #3,d0 move.w main_concury,d1 lsl.w #4,d1 add.w #128*2,d0 add.w #$28*2+main_coninpwin*16,d1 move.l main_configscr,a0 add.l #20480+8+44,a0 move.l main_concounter,d2 and.l #$1f,d2 and.l #$10,d2 beq.s .skipblink moveq.l #0,d0 .skipblink: bsr.w main_setspritepos bsr.w kbd_kbdlevel3 .trace: ENDIF bra.w .exitint ENDIF ; Main_DisableInt ************************************************************************* * Configscreen related routines * ************************************************************************* main_config: IFND main_debugoff move.l a7,main_conoldsp tst.l main_configscr ; Screen alocated ? beq.s main_conquit ; Quit instead !! tst.w main_contrace beq.s .cont ; Not tracing move.l main_dataptr,a0 tst.w 56(a0) ; main_trappedvector bne.s .cont ; Tracing !! .loop: btst #2,$dff016 beq.s .cont move.b $bfec01,d0 move.b main_lastkey,d1 move.b d0,main_lastkey cmp.b d0,d1 bne.s .cont btst #6,$bfe001 bne.s .loop .loop1: btst #6,$bfe001 beq.s .loop1 bra.s main_conexit .cont: clr.w main_contrace bsr.w kbd_flushbuffer bsr.w main_consaveall ; Save all bsr.w main_concode bra.s main_conexit ; Exit main_conquit: move.l main_dataptr,a0 tst.l 52(a0) ; Main_exitaddy beq.s .skippqqq0 move.l #main_exit,52(a0) .skippqqq0: move.l 52(a0),main_configpc ; Just exit main_conexit: move.l main_dataptr,a0 move.l 52(a0),d0 ; Main_exitaddy cmp.l main_configpc,d0 beq.s .skippcfix move.w 56(a0),d0 ; main_trappedvector,d0 lsl.w #3,d0 lea main_vectorlist,a0 move.l 4(a0,d0.w),d0 add.l d0,main_configpc move.l main_dataptr,a0 clr.w 56(a0) ; main_trappedvector .skippcfix: move.l main_conoldsp,a7 bsr.w main_conrestoreall st.b main_configexit ; Set exit flag move.b $bfec01,main_lastkey .sloop: bra.s .sloop main_consaveall:lea $dff000,a6 ; Custom base address move.w #1,main_contrace .waitvbl: move.l $04(a6),d0 ; Wait 4... and.l #$1ff00,d0 cmp.l #301*256,d0 bne.s .waitvbl ;...some frames .waitvbl1: move.l $04(a6),d0 ; Wait 4... and.l #$1ff00,d0 cmp.l #300*256,d0 bne.s .waitvbl1 ;...some frames move.w $1e(a6),main_conintreq ; Save intreq move.w #$3fdf,$9c(a6) ; Clear intreq move.w $1c(a6),main_conintena ; Save intena move.w #$3fdf,$9a(a6) ; Disable interrupts move.w $02(a6),main_condmacon ; Save dmacon move.w #$7fff,$96(a6) ; Clear dma IFND main_skipsysinfo tst.w main_aga beq.s .skippa lea $dff000,a6 lea main_concols,a0 move.w #$0100,$0104(a6) ; Read Ram move.w #$0000,$0106(a6) move.w $180(a6),(a0)+ move.w $182(a6),(a0)+ move.w $1a2(a6),(a0)+ move.w $1a4(a6),(a0)+ move.w $1ba(a6),(a0)+ move.w $1bc(a6),(a0)+ move.w $1be(a6),(a0) move.w #$0000,$0104(a6) ENDIF .skippa: clr.w main_contrace move.w #$8320,$96(a6) ; Enable bpldma+Sprite move.l main_vbrbase,a0 move.l $68(a0),kbd_oldlevel2 move.l #kbd_kbdlevel2,$68(a0) move.w #$8008,$9a(a6) rts main_conrestoreall:lea $dff000,a6 ; Custom base address .keyrel: tst.b kbd_keypressed bne.s .keyrel move.w #$3fdf,$9a(a6) ; Disable all interrupts intena .waitvbl2: move.l $04(a6),d0 ; Get Rast pos and.l #$1ff00,d0 ; Mask out vertical bits cmp.l #301*256,d0 ; Wait row bne.s .waitvbl2 ; Not reached move.l main_vbrbase,a0 move.l kbd_oldlevel2,$68(a0) or.w #$c000,main_conintena ; Set set bit or.w #$8000,main_conintreq ; Set set bit or.w #$8200,main_condmacon ; Set set bit .waitvbl3: move.l $04(a6),d0 ; Get Rast pos and.l #$1ff00,d0 ; Mask out vertical bits cmp.l #300*256,d0 ; Wait row bne.s .waitvbl3 ; Not reached move.w main_conintena,$9a(a6) ; Restore INTENA move.w #$3fdf,$9c(a6) ; Clear INTREQ move.w main_conintreq,$9c(a6) ; Restore INTREQ move.w #$7fff,$96(a6) ; Clear ALL DMA move.w main_condmacon,$96(a6) ; Restore DMA IFND main_skipsysinfo tst.w main_aga beq.s .skippa lea main_concols,a0 move.w #$0000,$0104(a6) move.w #$0000,$0106(a6) move.w (a0)+,$180(a6) move.w (a0)+,$182(a6) move.w (a0)+,$1a2(a6) move.w (a0)+,$1a4(a6) move.w (a0)+,$1ba(a6) move.w (a0)+,$1bc(a6) move.w (a0),$1be(a6) ENDIF .skippa: rts main_coninpwin = 6 main_conprintxy:;in: d0,d1,a0=x,y,strptr move.w d0,d6 move.w d1,d7 .newpos: move.w d6,d0 move.w d7,d1 add.w #main_coninpwin,d1 muls #80*8,d1 ; Calc.. add.l main_configscr,d1 move.l d1,d2 add.l d0,d1 move.l d1,a1 ; ..Scrptr lea main_font,a2 ; Font ptr moveq.l #0,d0 move.w #$00ff,d1 .loop: move.b (a0)+,d0 ; Get char beq.w .exit ; Zero=End of text cmp.b #10,d0 bne.s .skipsr moveq.l #0,d6 bra.w .newpos .skipsr: cmp.b #13,d0 bne.s .skiplf addq.l #1,d7 cmp.w #28-main_coninpwin,d7 blt.s .noscroll moveq.l #27-main_coninpwin,d7 move.l main_configscr,a5 add.l #8*80*main_coninpwin,a5 move.l a5,a4 add.l #8*80,a4 movem.l a0/d6-d7,-(a7) move.w #2*(248-24-main_coninpwin*8)-1,d0 moveq.l #40,d1 .copyloop: movem.l (a4)+,d2-a3 movem.l d2-a3,(a5) add.l d1,a5 dbra d0,.copyloop moveq.l #0,d1 move.l d1,d2 move.l d1,d3 move.l d1,d4 move.l d1,d5 move.l d1,d6 move.l d1,d7 move.l d1,a0 move.l d1,a1 move.l d1,a2 move.w #2*8-1,d0 .clrloop: movem.l d1-a2,-(a4) dbra d0,.clrloop movem.l (a7)+,a0/d6-d7 .noscroll: bra.w .newpos .skiplf: addq.w #1,d6 and.w d1,d0 lsl.w #3,d0 move.b 1(a2,d0.l),1*80(a1) move.b 2(a2,d0.l),2*80(a1) move.b 3(a2,d0.l),3*80(a1) move.b 4(a2,d0.l),4*80(a1) move.b 5(a2,d0.l),5*80(a1) move.b 6(a2,d0.l),6*80(a1) move.b 7(a2,d0.l),7*80(a1) move.b (a2,d0.l),(a1)+ bra.w .loop .exit: move.w d6,main_concurx move.w d7,main_concury rts main_conprint: ;a0=Ptr to text moveq.l #0,d0 move.w main_concurx,d0 move.w main_concury,d1 bra.w main_conprintxy main_conprintdec:;in: d0=Number lea main_txtdec,a0 move.l a0,a1 move.l a1,a2 moveq.l #0,d1 .loop: divu #10,d0 swap.w d0 add.b #48,d0 addq.l #1,d1 move.b d0,(a2)+ clr.w d0 swap.w d0 tst.l d0 bne.s .loop .ok: move.b #0,(a2) asr.w #1,d1 tst.w d1 beq.s .skipp subq.w #1,d1 .sloop: move.b (a1),d0 move.b -(a2),(a1)+ move.b d0,(a2) dbra d1,.sloop .skipp: bra.w main_conprint main_conprinthex:;in: d0=Number to print lea main_contxthex+8,a0 lea main_conhexchars,a1 moveq.l #0,d1 moveq.l #7,d2 .loop: move.b d0,d1 and.b #$f,d1 move.b (a1,d1.l),-(a0) lsr.l #4,d0 dbra d2,.loop bra.w main_conprint main_conprinthex4:;in: d0=Number to print lea main_contxthex+8,a0 lea main_conhexchars,a1 moveq.l #0,d1 moveq.l #3,d2 .loop: move.b d0,d1 and.b #$f,d1 move.b (a1,d1.l),-(a0) lsr.l #4,d0 dbra d2,.loop bra.w main_conprint main_conlf: lea main_contxtlf,a0 bra.w main_conprint main_concode: move.l main_concurx,-(a7) move.w #2,main_concurx move.w #-5,main_concury lea main_contxt02,a0 bsr.w main_conprint lea main_configregs,a5 moveq.l #7,d6 .regloop0: move.l (a5)+,d0 movem.l d6/a5,-(a7) bsr.w main_conprinthex lea main_contxt08,a0 bsr.w main_conprint movem.l (a7)+,d6/a5 dbra d6,.regloop0 bsr.w main_conlf move.w #2,main_concurx lea main_contxt03,a0 bsr.w main_conprint moveq.l #7,d6 .regloop1: move.l (a5)+,d0 movem.l d6/a5,-(a7) bsr.w main_conprinthex lea main_contxt08,a0 bsr.w main_conprint movem.l (a7)+,d6/a5 dbra d6,.regloop1 bsr.w main_conlf move.w #2,main_concurx lea main_contxt01,a0 bsr.w main_conprint move.l main_configpc,d0 bsr.w main_conprinthex lea main_contxt06,a0 bsr.w main_conprint move.w main_usersr,d0 bsr.w main_conprinthex4 lea main_contxt05,a0 bsr.w main_conprint move.w main_condmacon,d0 bsr.w main_conprinthex4 lea main_contxt07,a0 bsr.w main_conprint move.w main_conintena,d0 bsr.w main_conprinthex4 lea main_contxt09,a0 bsr.w main_conprint move.w main_conintreq,d0 bsr.w main_conprinthex4 move.w #2,main_concurx addq.w #1,main_concury lea main_contxt20,a0 bsr.w main_conprint move.l main_dataptr,a0 move.w 56(a0),d0 ; main_trappedvector,d0 lsl.w #3,d0 lea main_vectorlist,a0 move.l (a0,d0.w),a0 bsr.w main_conprint move.l (a7)+,main_concurx tst.w main_confirst bne.w .skipsi;------------------------ Run first time only -- move.w #1,main_confirst moveq.l #$5f,d0 moveq.l #0,d1 move.l #main_macro0,d2 bsr.w kbd_setmacro move.l main_concurx,-(a7) lea main_contxt16,a0 move.w #1,main_concurx move.w #24,main_concury bsr.w main_conprint move.l (a7)+,main_concurx move.l main_configscr,a0 move.l a0,a1 add.l #5*80,a1 move.l a1,a2 add.l #79,a2 moveq.l #3,d0 move.b #$c0,d1 moveq.l #80,d3 moveq.l #38,d2 .yloopq: move.b d1,(a1) move.b d0,(a2) add.l d3,a1 add.l d3,a2 dbra d2,.yloopq add.l #236*80,a0 move.b #$c0,d0 bsr.w .drawline add.l #17,a0 moveq.l #$01,d0 bsr.w .drawline addq.l #1,a0 move.b #$80,d0 bsr.w .drawline add.l #15,a0 moveq.l #$01,d0 bsr.s .drawline addq.l #1,a0 move.b #$80,d0 bsr.s .drawline add.l #12,a0 moveq.l #$01,d0 bsr.s .drawline addq.l #1,a0 move.b #$80,d0 bsr.s .drawline add.l #19,a0 moveq.l #$01,d0 bsr.s .drawline addq.l #1,a0 move.b #$80,d0 bsr.s .drawline add.l #12,a0 moveq.l #$03,d0 bsr.s .drawline move.l main_configscr,a0 move.l a0,a3 add.l #4*80,a3 add.l #(5*8+4)*80,a0 move.l a0,a1 add.l #24*8*80,a1 move.l a1,a2 add.l #2*8*80,a2 moveq.l #-1,d0 moveq.l #19,d1 .dlineloop: move.l d0,(a0)+ move.l d0,(a1)+ move.l d0,(a2)+ move.l d0,(a3)+ dbra d1,.dlineloop lea main_contxt00,a0 bsr.w main_conprint bsr.w main_conprintsi bra.s .skipsi .drawline: moveq.l #15,d1 move.l a0,a1 .yloop0: move.b d0,(a1) add.l #80,a1 dbra d1,.yloop0 rts .skipsi: move.w #0,main_concurx subq.w #1,main_concury .nextcommand: bsr.w kbd_flushbuffer ;------------------------------------------------------------- Input routine -- lea main_contxt04,a0 bsr.w main_conprint lea main_inputbuffer,a0 move.l a0,a6 bsr.w main_conprint .loop: btst #6,$bfe001 bne.s .nomouse move.w main_mousezone,d0 cmp.w #-1,d0 beq.s .nomouse lsl.w #2,d0 lea main_zonecodes,a0 move.l (a0,d0.w),a0 .mkrelloop: btst #6,$bfe001 beq.s .mkrelloop jsr (a0) bra.s .loop .nomouse: bsr.w kbd_readkey tst.b d0 beq.s .loop cmp.w #32,d0 blt.s .special cmp.w #128,d0 blt.s .ok cmp.w #160,d0 blt.s .special .ok: move.w main_inputlength,d1 cmp.w #79,d1 bge.s .loop move.b d0,(a6,d1.w) clr.b 1(a6,d1.w) lea main_contxt13,a0 move.b d0,(a0) bsr.w main_conprint addq.w #1,main_inputlength bra.s .loop .special: cmp.b #8,d0 beq.s .del cmp.b #13,d0 beq.s .enter cmp.b #27,d0 beq.s .esc bra.w .loop .esc: clr.l (a6) clr.w main_inputlength move.w #1,main_concurx lea main_contxt15,a0 bsr.w main_conprint move.w #1,main_concurx bra.w .loop .del: tst.w main_inputlength beq.w .loop move.w main_inputlength,d1 subq.w #1,d1 move.b #0,(a6,d1.w) move.w d1,main_inputlength subq.w #1,main_concurx lea main_contxt13,a0 move.b #32,(a0) bsr.w main_conprint subq.w #1,main_concurx bra.w .loop .enter: tst.w main_inputlength beq.w .nextcommand bsr.w main_conlf lea main_commandlist,a0 .cmdloop: move.l a6,a1 tst.b (a0) beq.w .nocmdfound .testloop: move.b (a0)+,d0 move.b (a1)+,d1 cmp.b #0,d0 bne.s .cont cmp.b #0,d1 beq.s .foundcode cmp.b #32,d1 beq.s .foundcode bra.s .nextcode .cont: cmp.b d0,d1 beq.s .testloop .moreloop: tst.b (a0)+ bne.s .moreloop .nextcode: addq.l #4,a0 move.l a0,d0 and.b #$1,d0 beq.s .cmdloop addq.l #1,a0 bra.s .cmdloop .foundcode: move.l a0,d0 and.b #$1,d0 beq.s .skipeven addq.l #1,a0 .skipeven: move.l (a0)+,a0 clr.l (a6) move.w #0,main_inputlength .keyrelloop: tst.b kbd_keypressed bne.s .keyrelloop jsr (a0) bra.w .nextcommand .nocmdfound: lea main_contxt14,a0 bsr.w main_conprint clr.l (a6) move.w #0,main_inputlength bra.w .nextcommand .exitcon: rts main_cmdtest: movem.l d0-a6,-(a7) lea main_contxt18,a0 bsr.w main_conprint lea test,a1 moveq.l #7,d1 .loop0: move.l (a1)+,d0 movem.l d1/a1,-(a7) bsr.w main_conprinthex lea main_contxt08,a0 bsr.w main_conprint movem.l (a7)+,d1/a1 dbra d1,.loop0 lea main_contxt19,a0 bsr.w main_conprint lea test+4*8,a1 moveq.l #7,d1 .loop1: move.l (a1)+,d0 movem.l d1/a1,-(a7) bsr.w main_conprinthex lea main_contxt08,a0 bsr.w main_conprint movem.l (a7)+,d1/a1 dbra d1,.loop1 bsr.w main_conlf bsr.w main_conlf lea main_contxt10,a0 bsr.w main_conprint move.l main_dataptr,a0 move.l 8(a0),d0 ; Get timer bsr.w main_conprinthex lea main_contxt11,a0 bsr.w main_conprint move.l main_dataptr,a0 move.l 4(a0),d0 ; Get counter bsr.w main_conprinthex lea main_contxt12,a0 bsr.w main_conprint move.l main_dataptr,a0 move.l (a0),d0 bsr.w main_conprinthex bsr.w main_conlf movem.l (a7)+,d0-a6 rts main_cmdcont: move.l #.exit,(a7) .exit: rts main_cmdtrace: move.w #-1,main_contrace move.l #.exit,(a7) .exit: rts main_cmdexit: move.l #.exit,(a7) move.l a0,-(a7) move.l main_dataptr,a0 move.l 52(a0),main_configpc ; Just exit main_exitaddy move.l (a7)+,a0 .exit: rts main_cmdview: movem.l d0-a6,-(a7) bsr.w main_conrestoreall st.b main_novbl move.b $bfec01,main_lastkey .loop: move.b $bfec01,d0 move.b main_lastkey,d1 move.b d0,main_lastkey cmp.b d0,d1 bne.s .exit btst #2,$dff016 beq.s .exit btst #6,$bfe001 bne.s .loop .exit: btst #6,$bfe001 beq.s .exit bsr.w main_consaveall clr.w main_novbl bsr.w kbd_flushbuffer movem.l (a7)+,d0-a6 rts main_cmdhelp: movem.l d0-a6,-(a7) lea main_contxt17,a0 bsr.w main_conprint movem.l (a7)+,d0-a6 rts main_cmdmeteron:movem.l d0-a6,-(a7) IFND main_meteroff bsr.w main_framemeteron ENDIF movem.l (a7)+,d0-a6 rts main_cmdmeteroff:movem.l d0-a6,-(a7) IFND main_meteroff bsr.w main_framemeteroff ENDIF movem.l (a7)+,d0-a6 rts main_cmddi: movem.l d0-a6,-(a7) lea main_contxt00,a0 bsr.w main_conprint movem.l (a7)+,d0-a6 rts main_cmdhelp2: movem.l d0-a6,-(a7) .loop: btst #6,$bfe001 beq.s .loop lea main_macro0,a5 .cpkloop: move.b (a5)+,d0 beq.s .exitikloop bsr.w kbd_insertkey bra.s .cpkloop .exitikloop: movem.l (a7)+,d0-a6 rts main_cmdscop: movem.l d0-a6,-(a7) IFND main_skipsysinfo lea main_copfound,a2 lea main_coptext00,a0 bsr.w main_conprint move.l main_copaddy,d0 addq.l #4,d0 and.l #-2,d0 move.l d0,a0 moveq.l #0,d2 move.l main_chipmem,d0 .searchloop0: move.w (a0),d1 move.l d2,(a2) addq.l #2,a0 cmp.l a0,d0 beq.w .notfound cmp.w main_copins0,d1 bne.s .searchloop0 move.l a0,a1 subq.l #2,a1 move.l a1,main_copaddy .searchloop1: move.w (a1),d1 subq.l #4,a1 cmp.l #0,a1 blt.s .searchloop0 btst #0,d1 bne.s .searchloop1 cmp.w #$040,d1 blo.s .oktop cmp.w #$1fe,d1 bls.s .searchloop1 .oktop: addq.l #8,a1 move.l a1,main_copfound .searchloop2: move.w (a1),d1 addq.l #4,a1 cmp.l d0,a1 beq.s .notfound cmp.w main_copins1,d1 beq.s .foundcopper btst #0,d1 bne.s .searchloop2 cmp.w #$040,d1 blo.s .searchloop0 cmp.w #$1fe,d1 bhi.w .searchloop0 bra.s .searchloop2 .foundcopper: lea main_coptext01,a0 bsr.w main_conprint move.l main_copfound,d0 bsr.w main_conprinthex bra.s .found .notfound: move.l d2,(a2) lea main_coptext02,a0 bsr.w main_conprint .found: bsr.w main_conlf ENDIF movem.l (a7)+,d0-a6 rts main_cmdcopadd: movem.l d0-a6,-(a7) move.l main_copfound,d0 beq.s .nocop addq.l #4,d0 move.l d0,main_copfound move.l d0,-(a7) lea main_coptext03,a0 bsr.w main_conprint move.l (a7)+,d0 bsr.w main_conprinthex bra.s .exit .nocop: lea main_coptext04,a0 bsr.w main_conprint .exit: bsr.w main_conlf movem.l (a7)+,d0-a6 rts main_cmdcopsub: movem.l d0-a6,-(a7) move.l main_copfound,d0 beq.s .nocop subq.l #4,d0 move.l d0,main_copfound move.l d0,-(a7) lea main_coptext03,a0 bsr.w main_conprint move.l (a7)+,d0 bsr.w main_conprinthex bra.s .exit .nocop: lea main_coptext04,a0 bsr.w main_conprint .exit: bsr.w main_conlf movem.l (a7)+,d0-a6 rts main_cmdcopview:movem.l d0-a6,-(a7) move.l main_copfound,d0 beq.s .nocop move.l d0,-(a7) lea main_coptext03,a0 bsr.w main_conprint move.l (a7),d0 bsr.w main_conprinthex move.l (a7)+,d0 move.l d0,a6 moveq.l #7,d0 .loop: move.l d0,-(a7) move.l a6,d0 bsr.w main_conprinthex lea main_coptext05,a0 bsr.w main_conprint moveq.l #0,d0 move.w (a6)+,d0 bsr.w main_conprinthex4 lea main_coptext06,a0 bsr.w main_conprint moveq.l #0,d0 move.w (a6)+,d0 bsr.w main_conprinthex4 bsr.w main_conlf move.l (a7)+,d0 dbra d0,.loop bra.s .exit .nocop: lea main_coptext04,a0 bsr.w main_conprint .exit: bsr.w main_conlf movem.l (a7)+,d0-a6 rts main_copaddy: dc.l 0 main_copfound: dc.l 0 main_copins0: dc.w $0100 main_copins1: dc.w $ffff main_coptext00: dc.b 10,13,'Searching for copper list ...',0 main_coptext01: dc.b 'Found at: $',0 main_coptext02: dc.b 'Not found !!',0 main_coptext03: dc.b 10,13,'Copper at: $',0 main_coptext04: dc.b 10,13,'No copper in memory !!',0 main_coptext05: dc.b ': dc.w $',0 main_coptext06: dc.b ',$',0 even main_conprintsi: IFND main_sysinfooff lea main_txtpower,a0 bsr.w main_conprint move.l main_powptr,a0 bsr.w main_conprint lea main_txtproc,a0 bsr.w main_conprint move.l main_procptr,a0 bsr.w main_conprint lea main_txtcoproc,a0 bsr.w main_conprint move.l main_coprocptr,a0 bsr.w main_conprint lea main_txtmmu,a0 bsr.w main_conprint move.l main_mmuptr,a0 bsr.w main_conprint lea main_txtaga,a0 bsr.w main_conprint move.l main_gfxptr,a0 bsr.w main_conprint lea main_txtvbl,a0 bsr.w main_conprint move.l main_refreshptr,a0 bsr.w main_conprint lea main_txtmemchip,a0 bsr.w main_conprint move.l main_chipmem,d0 lsr.l #8,d0 lsr.l #2,d0 bsr.w main_conprintdec lea main_txtmemfast,a0 bsr.w main_conprint move.l main_fastmem,d0 lsr.l #8,d0 lsr.l #2,d0 bsr.w main_conprintdec lea main_txtkblf,a0 bsr.w main_conprint ENDIF rts main_mousemove: move.w $dff00a,d0 move.w main_mouseold,d1 move.w d0,main_mouseold move.w d0,d2 move.w d1,d3 and.w #$ff,d0 and.w #$ff,d1 lsr.w #8,d2 lsr.w #8,d3 sub.b d0,d1 sub.b d2,d3 ext.w d1 ext.w d3 neg.w d1 neg.w d3 move.w main_mousex,d4 move.w main_mousey,d5 add.w d1,d4 add.w d3,d5 cmp.w #0,d4 bge.s .okx0 moveq.l #0,d4 .okx0: cmp.w main_mousewidth,d4 ble.s .okx1 move.w main_mousewidth,d4 .okx1: cmp.w #0,d5 bge.s .oky0 moveq.l #0,d5 .oky0: cmp.w main_mouseheight,d5 ble.s .oky1 move.w main_mouseheight,d5 .oky1: move.w d4,main_mousex move.w d5,main_mousey move.w d4,d0 move.w d5,d1 moveq.l #8,d2 sub.w main_mousesprx,d0 sub.w main_mousespry,d1 add.w main_mouseorgx,d0 add.w main_mouseorgy,d1 move.l main_mousesprptr,d2 beq.s .skipspr move.l d2,a0 bsr.w main_setspritepos .skipspr: move.w main_mousex,d0 move.w main_mousey,d1 moveq.l #-1,d2 move.l d2,d7 lea main_mousezones,a0 .mzloop: addq.w #1,d2 movem.w (a0)+,d3-d6 ; Get X0 move.l (a0)+,a1 cmp.w #-1,d3 beq.s .exit cmp.w d0,d3 bgt.s .mzloop cmp.w d1,d4 bgt.s .mzloop cmp.w d0,d5 blt.s .mzloop cmp.w d1,d6 blt.s .mzloop move.w d2,d7 cmp.l #0,a1 beq.s .skip movem.l d0-a6,-(a7) jsr (a1) movem.l (a7)+,d0-a6 .skip: bra.s .mzloop .exit: move.w d7,main_mousezone rts main_setspritepos:;in: a0,d0,d1=Sprite ptr,Xpos,Ypos moveq.l #0,d2 move.b 2(a0),d2 moveq.l #0,d3 move.b (a0),d3 sub.w d3,d2 bge.s .heightok add.w #$100,d2 .heightok: moveq.l #0,d3 ; Ctrl byte move.w d0,d4 asr.w #1,d0 btst #0,d4 beq.s .noctrl3 or.w #%10000,d3 ; AGA... .noctrl3: asr.w #1,d1 move.w d1,d4 and.w #$ff,d4 move.b d4,(a0) btst #8,d1 beq.s .noctrl0 or.w #%100,d3 .noctrl0: add.w d2,d1 move.w d1,d4 and.w #$ff,d4 move.b d4,2(a0) btst #8,d1 beq.s .noctrl1 or.w #%10,d3 .noctrl1: move.w d0,d1 lsr.w #1,d0 move.b d0,1(a0) btst #0,d1 beq.s .noctrl2 or.w #%1,d3 .noctrl2: move.b d3,3(a0) rts ************************************************************************* * Non OS readkeyboard routine by Equalizer/TBL (Hints from Sag) * * With: - keymap translation (Raw to ASCII, Keyboard definer in AMOS) * * - keyboard buffering (255 chars) * * - keyboard repetition * ************************************************************************* kbd_shift = $01 kbd_ctrl = $02 kbd_alt = $04 kbd_lamiga = $08 kbd_ramiga = $10 ;------------------------------------------------------- KeyBoard interrupts -- kbd_kbdlevel3:;------------------------------------- Level 3 (VBL) interrupt -- tst.b kbd_keypressed beq.s .rts move.w kbd_repttimerw,d0 bne.s .wait move.w kbd_repttimers,d0 bne.s .waitspeed move.w kbd_reptspeed,kbd_repttimers move.w kbd_asciikey,d0 bsr.w kbd_insertkey bra.s .rts .waitspeed: subq.w #1,d0 move.w d0,kbd_repttimers bra.s .rts .wait: subq.w #1,d0 move.w d0,kbd_repttimerw .rts: rts kbd_kbdlevel2: movem.l d0-a6,-(a7) ;--------------------- Level 2 interrupt -- btst #3,$bfed01 beq .quit move.b $bfec01,d0 move.b d0,kbd_realraw move.b #0,kbd_keypressed move.w kbd_reptwait,kbd_repttimerw move.w kbd_reptspeed,kbd_repttimers btst #0,d0 beq.s .skippa move.b #1,kbd_keypressed .skippa: neg.b d0 add.b #$ff,d0 ror.b #1,d0 and.w #$ff,d0 move.b d0,kbd_rawkey .skip: lea kbd_flagcodes,a0 moveq.l #7,d1 .cloop: cmp.b (a0)+,d0 bne.s .noflagset bset.b d1,kbd_realflags ; Set flag bit .noflagset: cmp.b 8-1(a0),d0 bne.s .noflagsclr bclr.b d1,kbd_realflags ; Clear flag bit .noflagsclr: dbra d1,.cloop .noflag: lea $dff006,a6 bsr .waitrow bset #6,$bfee01 bsr .waitrow move.b #0,$bfec01 bsr .waitrow bclr #6,$bfee01 bsr .waitrow ;-------------------------------------------------------- Raw to asciibuffer -- moveq.l #0,d3 move.b kbd_rawkey,d3 cmp.w #128,d3 bge.w .exit ; Strange rawcode? cmp.w #0,d3 beq.w .exit moveq.l #0,d1 ; Flags. moveq.l #0,d2 move.b kbd_realflags,d2 ; KeyB Flags btst #0,d2 ; Caps beq.s .skip0 or.b #$1,d1 .skip0: btst #1,d2 ; Ctrl beq.s .skip1 or.b #$2,d1 .skip1: btst #2,d2 ; LShift beq.s .skip2 or.b #$1,d1 .skip2: btst #3,d2 ; LAlt beq.s .skip3 or.b #$4,d1 .skip3: btst #4,d2 ; LAmiga beq.s .skip4 or.b #$8,d1 .skip4: btst #5,d2 ; RAmiga beq.s .skip5 or.b #$10,d1 .skip5: btst #6,d2 ; RAlt beq.s .skip6 or.b #$4,d1 .skip6: btst #7,d2 ; RShift beq.s .skip7 or.b #$1,d1 .skip7: move.b d1,kbd_flags lsl.w #7,d1 add.w d3,d1 lsl.l #1,d1 add.l kbd_keymapptr,d1 move.l kbd_keymapptr,d7 bne.s .qqq add.l #kbd_keydefault,d1 .qqq: move.l d1,a1 move.w (a1),d2 move.w d2,kbd_asciikey move.w d2,d0 bsr.w kbd_insertkey .exit: move.l kbd_customptr,d0 beq.s .quit move.l d0,a0 jsr (a0) .quit: move.w #$0008,$dff09c movem.l (a7)+,d0-a6 rte .waitrow: move.b (a6),d0 addq.w #2,d0 .loop: cmp.b (a6),d0 bne.s .loop rts ;----------------------------------------------------- Ascii buffer routines -- ************************************************************************* kbd_setascii: ; Changes an ascii value for a special RAW code * * in: d0.w,d1.w,d2.w=Raw value,Flags,New ASCII * ************************************************************************* move.l kbd_keymapptr,d3 bne.s .skip move.l #kbd_keydefault,d3 .skip: move.l d3,a0 and.l #$1f,d1 lsl.w #7,d1 add.w d0,d1 lsl.l #1,d1 and.w #$ff,d2 move.w d2,(a0,d1.l) rts ************************************************************************* kbd_setmacro:; Sets a macro for a special RAW code * * in: d0.w,d1.w,d2.l=Raw value,Flags,String ptr * ************************************************************************* move.l kbd_keymapptr,d3 bne.s .skip move.l #kbd_keydefault,d3 .skip: move.l d3,a0 and.l #$1f,d1 lsl.w #7,d1 add.w d0,d1 move.w d1,d3 or.w #$8000,d3 lsl.l #1,d1 move.w d3,(a0,d1.l) lsl.l #1,d1 move.l kbd_macroptr,d3 beq.s .skip1 move.l d3,a0 move.l d2,(a0,d1.l) .skip1: rts ************************************************************************* kbd_setcode:; Sets a code for a special RAW code * * in: d0.w,d1.w,d2.l=Raw value,Flags,Code ptr * ************************************************************************* or.l #$80000000,d2 ; Special codeptr bra.s kbd_setmacro ************************************************************************* kbd_insertkey: ;Inserts an ASCII-code into the keyboard buffer * * in: d0=ASCII-code * ************************************************************************* move.w d0,d2 .inkey: lea kbd_buffer,a0 moveq.l #0,d0 moveq.l #0,d1 move.b (a0)+,d0 ; d0=head ptr move.b (a0)+,d1 ; d1=tail ptr addq.w #2,d0 andi.w #$ff,d0 cmp.w d0,d1 ; head=tail=full !! beq.w .exit subq.w #1,d0 andi.w #$ff,d0 move.b d0,-2(a0) ; Save new head lsl.w #1,d0 move.w d2,(a0,d0.w) .exit: rts ************************************************************************* kbd_readkey: ; Reads an ASCII-code form keyboard buffer * * Out: d0=ASCII-code (0=No key) * ************************************************************************* movem.l d1-a6,-(a7) .next: moveq.l #0,d0 tst.b kbd_macroread bne.s .domacro lea kbd_buffer,a0 move.b (a0)+,d1 move.b (a0)+,d2 cmp.b d1,d2 beq.s .rts ; Equal=Empty addq.w #1,d2 and.w #$ff,d2 move.b d2,-1(a0) lsl.w #1,d2 move.w (a0,d2.w),d0 move.w d0,d2 and.w #$3fff,d0 lsr.w #8,d2 lsr.w #6,d2 cmp.w #%10,d2 beq.s .fixmacro and.w #$ff,d0 .rts: movem.l (a7)+,d1-a6 rts .fixmacro: move.w d0,d2 and.l #$3fff,d2 move.l kbd_macroptr,d1 beq.s .skipmacall lsl.l #2,d2 move.l d1,a0 move.l (a0,d2.l),d1 beq.s .rts btst #31,d1 bne.s .codemacro move.l d1,kbd_macropos .domacro: move.l kbd_macropos,a0 clr.b kbd_macroread moveq.l #0,d0 move.b (a0)+,d0 beq.w .next st.b kbd_macroread move.l a0,kbd_macropos bra.s .rts .codemacro: and.l #$7fffffff,d1 move.l d1,a5 movem.l d0-a6,-(a7) jsr (a5) movem.l (a7)+,d0-a6 .skipmacall: bra.w .next ************************************************************************* kbd_flushbuffer: ; Clears keyboard buffer * ************************************************************************* move.b kbd_buffer,kbd_buffer+1 rts ***************************************************************** * RAW-Code for some special function keys. * * help $5f * * up $4c * * down $4d * * left $4f * * right $4e * * return $44 * * space $40 * * esc $45 * * enter $43 * * tab $42 * ***************************************************************** ENDIF main_play: dc.w 0 ************************************************************************* * Configuration related data * ************************************************************************* IFND main_meteroff IFND main_debugoff main_framemeteron: move.l main_configscr,d0 beq.w .exit tst.w .first bne.s .skip st.b .first move.w $dff002,main_framedma and.w #%100000,main_framedma move.l d0,a0 add.l #20480+1024,a0 move.l #$28d82802,(a0)+ ;-------------------------------------- Sprite 6 -- move.w #255,d0 move.l #$ffff0000,d1 .fillloop: move.l d1,(a0)+ dbra d0,.fillloop clr.l (a0)+ ;-------------------------------------- Sprite 7 -- move.l #$28d82802,(a0)+ lea main_framesprite,a1 move.w #1024/4-1,d0 .copyloop: move.l (a1)+,(a0)+ dbra d0,.copyloop clr.l (a0) lea $dff000,a6 .sync: cmp.b #$ff,$dff006 bne.s .sync move.w #$e002,$106(a6) move.w #$0f0,$1ba(a6) move.w #$003,$1bc(a6) move.w #$fff,$1be(a6) .skip: st.b main_frameon .exit: rts .first: dc.w 0 main_framemeteroff: tst.w main_framedma bne.s .skip move.w #%100000,$dff096 .skip: clr.w main_frameon rts main_framedma: dc.w 0 main_frameon: dc.w 0 main_frameint: tst.w main_frameon beq.w .exit lea $dff000,a6 move.w #$8200!%100000,$96(a6) move.w #$e002,$106(a6) move.l #$0f00003,$1ba(a6) move.w #$e002,$106(a6) move.w #$fff,$1be(a6) move.l main_configscr,a0 add.l #20480+1024,a0 move.l main_dataptr,a1 move.l 48(a1),d0 divu #313*4,d0 cmp.w #255,d0 ble.s .ok move.w #255,d0 .ok: cmp.w #0,d0 bge.s .ok4 moveq.l #0,d0 .ok4: ;-------------------------- d0=0-255 -- neg.w d0 add.w #255,d0 add.w #$28,d0 moveq.l #$2,d1 ; CTRL cmp.w #$100,d0 blt.s .ok1 or.w #$4,d1 .ok1: move.b d0,(a0) add.w #256,d0 cmp.w #256+$28,d0 ble.s .ok2 move.w #256+$38,d0 .ok2: move.b d0,2(a0) move.b d1,3(a0) move.w #$3f,$104(a6) move.w #$ff,$10c(a6) move.l main_configscr,a0 add.l #20480,a0 tst.w main_framedma bne.s .skipcl lea $dff120,a6 moveq.l #5,d0 .loop: move.l a0,(a6)+ dbra d0,.loop bra.s .cont .skipcl: add.l #6*4,a6 .cont: add.l #1024+1024+8,a0 move.l a0,(a6)+ sub.l #1024+8,a0 move.l a0,(a6) .exit: rts main_framesprite: dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$ffff0000 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $9e013eaa,$82015754,$84012eaa,$e5f11404 dc.l $88012aaa,$88015d54,$88012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$ffc10014 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $8e012eaa,$90015554,$90013aaa,$dcf11d04 dc.l $92013aaa,$92015754,$8c012eaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$ffc10014 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $9e013eaa,$90015554,$90013aaa,$ddf11c04 dc.l $82012aaa,$92015754,$8c012eaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$ffc10014 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $92013aaa,$92015754,$92013aaa,$def11f04 dc.l $82012aaa,$82015754,$82012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$ffc10014 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $8c012eaa,$92015754,$82012aaa,$ecf11d04 dc.l $82012aaa,$92015754,$8c012eaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$ffc10014 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$8c015d54,$92013aaa,$c2f11704 dc.l $84012eaa,$88015d54,$9e013eaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$ffc10014 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $84012eaa,$8c015d54,$84012eaa,$f5f10404 dc.l $84012eaa,$84015554,$8e012eaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$ffc10014 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$803f5540 dc.l $80012aaa,$80015554,$80012aaa,$80015554 dc.l $80012aaa,$80015554,$80012aaa,$ffff0000 ENDIF ENDIF IFND MAIN_DEBUGOFF main_contxt00: dc.b 13,10,' NonSystem startup v3.1 - Copyright TBL 1995.' dc.b 13,10,' Debugger v1.0 - Copyright TBL 1995.' dc.b 13,10,13,10 dc.b ' Coded by Equalizer of The Black Lotus.',13,10 dc.b 13,10 dc.b 0 main_contxt01: dc.b 'PC: ',0 main_contxtlf: dc.b 10,13,0 main_contxt02: dc.b 'D0: ',0 main_contxt03: dc.b 'A0: ',0 main_contxt04: dc.b 10,13,'>',0 main_contxt05: dc.b ' dma: ',0 main_contxt06: dc.b ' SR: ',0 main_contxt07: dc.b ' intena: ',0 main_contxt08: dc.b ' ',0 main_contxt09: dc.b ' intreq: ',0 main_contxt10: dc.b ' timer: ',0 main_contxt11: dc.b ' counter: ',0 main_contxt12: dc.b ' main_counter: ',0 main_contxt13: dc.b 0,0 main_contxt14: dc.b 10,13,'Unknown command !!!',10,13,0 main_contxt15: blk.b 79,32 dc.b 0 main_contxt16: dc.b 'Continue program Exit to system View screen' dc.b ' Run frame by frame Commands',0 main_contxt17: dc.b 13,10,' # Help',13,10,13,10 dc.b " 'j' Continue program " dc.b " '!' Exit to system",13,10 dc.b " 'v' View program screen " dc.b " 'f' Run frame by frame",13,10 dc.b " 'hi' Hardware info " dc.b " 'help' Display commands",13,10 dc.b " 't' View variables (Timer,Counters & Test:)",13,10 dc.b " 'di' View debugger info (Version etc.)",13,10 dc.b " 'scop' Search fro copperlist in memory",13,10 dc.b " 'vcop' View copper list (Text)",13,10 dc.b " 'copadd' Adds 4 to copper address.",13,10 dc.b " 'copsub' Subtracts 4 to copper address.",13,10 dc.b " 'meteron' Enable frame meter.",13,10 dc.b " 'meteroff' Disable frame meter.",13,10 dc.b 0 main_contxt18: dc.b 13,10,' test: ',0 main_contxt19: dc.b 13,10,' ',0 main_contxt20: dc.b 'Debugger called by: ',0 main_conhexchars:dc.b '0123456789abcdef' main_contxthex: dc.b '00000000',0 IFND main_debugoff main_macro0: dc.b 27,'help',13,0 even main_commandlist:dc.b 'hi',0,0 dc.l main_conprintsi dc.b 'j',0 dc.l main_cmdcont dc.b '!',0 dc.l main_cmdexit dc.b 'v',0 dc.l main_cmdview dc.b 't',0 dc.l main_cmdtest dc.b 'f',0 dc.l main_cmdtrace dc.b 'di',0,0 dc.l main_cmddi dc.b 'help',0,0 dc.l main_cmdhelp dc.b 'scop',0,0 dc.l main_cmdscop dc.b 'copadd',0,0 dc.l main_cmdcopadd dc.b 'copsub',0,0 dc.l main_cmdcopsub dc.b 'vcop',0,0 dc.l main_cmdcopview dc.b 'meteron',0 dc.l main_cmdmeteron dc.b 'meteroff',0,0 dc.l main_cmdmeteroff dc.l 0 main_mouseold: dc.w 0 main_mousex: dc.w 0 ; X Pos main_mousey: dc.w 0 ; Y Pos main_mouseorgx: dc.w 128*2 ; X Org main_mouseorgy: dc.w $28*2 ; Y Org main_mousesprx: dc.w 6 ; Sprite X main_mousespry: dc.w 6 ; Sprite Y main_mousesprptr:dc.l 0 ; Sprite ptr main_mousewidth:dc.w 640 ; Sprite zone width main_mouseheight:dc.w 512 ; Sprite zone height main_mousezone: dc.w -1 ; Reports current mousezone main_zonecodes: dc.l main_cmdcont dc.l main_cmdexit dc.l main_cmdview dc.l main_cmdtrace dc.l main_cmdhelp2 main_mousezones:dc.w 0,472,143,504 dc.l 0 dc.w 144,472,271,504 dc.l 0 dc.w 272,472,375,504 dc.l 0 dc.w 376,472,537,504 dc.l 0 dc.w 538,472,639,504 dc.l 0 dc.w -1,-1,-1,-1 ; No more mousezones.. dc.l 0 ; Blahhh main_inputlength:dc.w 0 main_inputbuffer:blk.b 128 main_mousesprite:dc.l $48605000 dc.w %1001001000000000,%1000001000000000 dc.w %0000000000000000,%0000000000000000 dc.w %0000000000000000,%0001000000000000 dc.w %1000001000000000,%0010100000000000 dc.w %0000000000000000,%0001000000000000 dc.w %0000000000000000,%0000000000000000 dc.w %1001001000000000,%1000001000000000 dc.w %0000000000000000,%0000000000000000 dc.l 0,0 main_curssprite:dc.l $48605000 dc.w %1111000000000000,%0000000000000000 dc.w %1001000000000000,%0110000000000000 dc.w %1001000000000000,%0110000000000000 dc.w %1001000000000000,%0110000000000000 dc.w %1001000000000000,%0110000000000000 dc.w %1001000000000000,%0110000000000000 dc.w %1001000000000000,%0110000000000000 dc.w %1111000000000000,%0000000000000000 dc.l 0,0 main_confirst: dc.w 0 main_concurx: dc.w 0 ; Config screen XCursor main_concury: dc.w 0 ; Config screen YCursor main_font: dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $00000000,$00000000,$183c3c18,$18001800 dc.l $6c6c0000,$00000000,$6c6cfe6c,$fe6c6c00 dc.l $183e603c,$067c1800,$00c6cc18,$3066c600 dc.l $386c6876,$dccc7600,$18183000,$00000000 dc.l $0c183030,$30180c00,$30180c0c,$0c183000 dc.l $00663cff,$3c660000,$0018187e,$18180000 dc.l $00000000,$00181830,$0000007e,$00000000 dc.l $00000000,$00181800,$03060c18,$3060c000 dc.l $3c666e7e,$76663c00,$18381818,$18187e00 dc.l $3c66061c,$30667e00,$3c66061c,$06663c00 dc.l $1c3c6ccc,$fe0c1e00,$7e607c06,$06663c00 dc.l $1c30607c,$66663c00,$7e66060c,$18181800 dc.l $3c66663c,$66663c00,$3c66663e,$060c3800 dc.l $00181800,$00181800,$00181800,$00181830 dc.l $0c183060,$30180c00,$00007e00,$007e0000 dc.l $30180c06,$0c183000,$3c66060c,$18001800 dc.l $7cc6dede,$dec07800,$183c3c66,$7ec3c300 dc.l $fc66667c,$6666fc00,$3c66c0c0,$c0663c00 dc.l $f86c6666,$666cf800,$fe666078,$6066fe00 dc.l $fe666078,$6060f000,$3c66c0ce,$c6663e00 dc.l $6666667e,$66666600,$7e181818,$18187e00 dc.l $0e060606,$66663c00,$e6666c78,$6c66e600 dc.l $f0606060,$6266fe00,$82c6eefe,$d6c6c600 dc.l $c6e6f6de,$cec6c600,$386cc6c6,$c66c3800 dc.l $fc66667c,$6060f000,$386cc6c6,$c66c3c06 dc.l $fc66667c,$6c66e300,$3c667038,$0e663c00 dc.l $7e5a1818,$18183c00,$66666666,$66663e00 dc.l $c3c36666,$3c3c1800,$c6c6c6d6,$feeec600 dc.l $c3663c18,$3c66c300,$c3c3663c,$18183c00 dc.l $fec68c18,$3266fe00,$3c303030,$30303c00 dc.l $c0603018,$0c060300,$3c0c0c0c,$0c0c3c00 dc.l $10386cc6,$00000000,$00000000,$000000fe dc.l $18180c00,$00000000,$00003c06,$1e663b00 dc.l $e0606c76,$66663c00,$00003c66,$60663c00 dc.l $0e06366e,$66663b00,$00003c66,$7e603c00 dc.l $1c363078,$30307800,$00003b66,$663cc67c dc.l $e0606c76,$6666e600,$18003818,$18183c00 dc.l $06000606,$0606663c,$e060666c,$786ce600 dc.l $38181818,$18183c00,$00006677,$6b636300 dc.l $00007c66,$66666600,$00003c66,$66663c00 dc.l $0000dc66,$667c60f0,$00003d66,$663e0607 dc.l $0000ec76,$6660f000,$00003e60,$3c067c00 dc.l $08183e18,$181a0c00,$00006666,$66663b00 dc.l $00006666,$663c1800,$0000636b,$6b363600 dc.l $00006336,$1c366300,$00006666,$663c1870 dc.l $00007e4c,$18327e00,$0e181870,$18180e00 dc.l $18181818,$18181800,$7018180e,$18187000 dc.l $729c0000,$00000000,$cc33cc33,$cc33cc33 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $7e666666,$66667e00,$7e666666,$66667e00 dc.l $00000000,$00000000,$18001818,$3c3c1800 dc.l $0c3e6c6c,$3e0c0000,$1c363078,$30307e00 dc.l $423c663c,$42000000,$c3663c18,$3c183c00 dc.l $18181800,$18181800,$3c403c66,$3c023c00 dc.l $66000000,$00000000,$7e819db1,$b19d817e dc.l $304888f8,$00fc0000,$003366cc,$66330000 dc.l $3e060000,$00000000,$00007e7e,$00000000 dc.l $7e81b9b9,$b1a9817e,$7e000000,$00000000 dc.l $3c663c00,$00000000,$18187e18,$18007e00 dc.l $f0183060,$f8000000,$f0183018,$f0000000 dc.l $18300000,$00000000,$0000c6c6,$c6eefac0 dc.l $7ef4f474,$14141400,$00001818,$00000000 dc.l $00000000,$00001830,$30703030,$30000000 dc.l $70888870,$00f80000,$00cc6633,$66cc0000 dc.l $2063262c,$19336701,$2063262c,$1b316207 dc.l $c023662c,$d9336701,$18001830,$60663c00 dc.l $30083c66,$7ec3c300,$0c103c66,$7ec3c300 dc.l $18243c66,$7ec3c300,$718e3c66,$7ec3c300 dc.l $c3183c66,$7ec3c300,$3c663c66,$7ec3c300 dc.l $1f3c3c6f,$7ccccf00,$3c66c0c0,$663c0830 dc.l $6010fe60,$7860fe00,$1820fe60,$7860fe00 dc.l $3048fe60,$7860fe00,$6600fe60,$7860fe00 dc.l $30087e18,$18187e00,$0c107e18,$18187e00 dc.l $18247e18,$18187e00,$66007e18,$18187e00 dc.l $f86c66f6,$666cf800,$718ec6e6,$d6cec600 dc.l $30083c66,$c3663c00,$0c103c66,$c3663c00 dc.l $18243c66,$c3663c00,$718e3c66,$c3663c00 dc.l $c33c66c3,$c3663c00,$0063361c,$36630000 dc.l $3d66cfdb,$f366bc00,$30086666,$66663e00 dc.l $0c106666,$66663e00,$18246666,$66663e00 dc.l $66006666,$66663e00,$0608c366,$3c183c00 dc.l $f0607e63,$637e60f0,$7c66666c,$66666c60 dc.l $30083c06,$1e663b00,$0c103c06,$1e663b00 dc.l $18243c06,$1e663b00,$718e3c06,$1e663b00 dc.l $33003c06,$1e663b00,$3c663c06,$1e663b00 dc.l $00007e1b,$7fd87700,$00003c66,$60663c10 dc.l $30083c66,$7e603c00,$0c103c66,$7e603c00 dc.l $18243c66,$7e603c00,$66003c66,$7e603c00 dc.l $30083818,$18183c00,$0c103818,$18183c00 dc.l $18243818,$18183c00,$66003818,$18183c00 dc.l $60fc187c,$c6c67c00,$718e7c66,$66666600 dc.l $30083c66,$66663c00,$0c103c66,$66663c00 dc.l $18243c66,$66663c00,$718e3c66,$66663c00 dc.l $66003c66,$66663c00,$0018007e,$00180000 dc.l $00013e67,$6b733e40,$30086666,$66663b00 dc.l $0c106666,$66663b00,$18246666,$66663b00 dc.l $66006666,$66663b00,$0c106666,$663c1870 dc.l $f0607c66,$667c60f0,$66006666,$663c1870 main_concols: blk.w 7 main_configcop: dc.l $01009200,$01020000,$01040024,$01060000,$010c0011 dc.l $01fc0000,$01080000,$010a0000,$01800000,$018200f0 dc.l $01ba0888,$01bc0bbb,$01be0eee,$01a200d0,$01a400a0 dc.l $008e2881,$009028c1,$0092003c,$009400d4 main_conbplptrs:dc.l $00e00000,$00e20000 main_consprptr: dc.l $01200000,$01220000,$01240000,$01260000 dc.l $01280000,$012a0000,$012c0000,$012e0000 dc.l $01300000,$01320000,$01340000,$01360000 dc.l $01380000,$013a0000,$013c0000,$013e0000 dc.l $fffffffe main_conoldsp: dc.l 0 main_concounter:dc.l 0 ; Up 1 every VBL ;----------------------------------------------------------- Keyboard data -- kbd_oldlevel2: dc.l 0 ; For saving level 2 kbd_reptwait: dc.w 10 ; VBL's until rept kbd_reptspeed: dc.w 0 ; Rept speed kbd_repttimerw: dc.w 0 ; Timer for rept wait kbd_repttimers: dc.w 0 ; Timer for rept speed kbd_flagcodes: dc.b $61,$65,$67,$66,$64,$60,$63,$62 dc.b $e1,$e5,$e7,$e6,$e4,$e0,$e3,$e2 kbd_realflags: dc.b 0 ; Cps,Ctl,LSh,LAlt,LAm,RAm,RAlt,RSh kbd_flags: dc.b 0 kbd_realraw: dc.b 0 ; Input real raw kbd_rawkey: dc.b 0 ; The raw value of the keypress kbd_keypressed: dc.b 0 ; Keypressed flag, 0=Not pressed kbd_macroread: dc.b 0 ; Read from macro buffer flag. kbd_macropos: dc.l 0 ; Macro read pos kbd_asciikey: dc.w 0 ; Last ascii code kbd_customptr: dc.l 0 ; Custom routine on every key event kbd_keymapptr: dc.l 0 ; Ptr to keymap (0=Default) kbd_macroptr: dc.l 0 ; Ptr to macro list (0=No macros) kbd_keydefault: dc.l $00600031,$00320033,$00340035,$00360037 dc.l $00380039,$0030002b,$0027005c,$00000030 dc.l $00710077,$00650072,$00740079,$00750069 dc.l $006f0070,$00e500a8,$00000031,$00320033 dc.l $00610073,$00640066,$00670068,$006a006b dc.l $006c00f6,$00e40027,$00000034,$00350036 dc.l $003c007a,$00780063,$00760062,$006e006d dc.l $002c002e,$002d0000,$002e0037,$00380039 dc.l $00200008,$0009000d,$000d001b,$007f0000 dc.l $00000000,$002d0000,$00800081,$00830082 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$005b005d,$002f002a,$002b00a0 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $007e0021,$002200a3,$00240025,$0026002f dc.l $00280029,$003d003f,$006000a6,$00000030 dc.l $00510057,$00450052,$00540059,$00550049 dc.l $004f0050,$00c2005e,$00000000,$00000000 dc.l $00410053,$00440046,$00470048,$004a004b dc.l $004c00d6,$00c4002a,$00000000,$00000000 dc.l $003e005a,$00580043,$00560042,$004e004d dc.l $003b003a,$005f0000,$002e0000,$00000000 dc.l $00200000,$00090000,$000d001b,$009e0000 dc.l $00000000,$002d0000,$00840085,$00870086 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$007b007d,$002f002a,$002b00a1 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00600031,$00320033,$00340035,$00360037 dc.l $00380039,$0030002b,$0027005c,$00000000 dc.l $00710077,$00650072,$00740079,$00750069 dc.l $006f0070,$00e500a8,$00000000,$00000000 dc.l $00610073,$00640066,$00670068,$006a006b dc.l $006c00f6,$00e40027,$00000000,$00000000 dc.l $003c007a,$00780063,$00760062,$006e006d dc.l $002c002e,$002d0000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00880089,$008b008a dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$000000a2 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $006000a1,$00b200b3,$00a40000,$00000000 dc.l $00000000,$000000bf,$003d0000,$00000000 dc.l $00710077,$00e900ae,$00740079,$00750069 dc.l $006f0070,$00e5005e,$00000000,$00000000 dc.l $00bc00bd,$00be0066,$00670068,$006a006b dc.l $006c002c,$002700b7,$00000000,$00000000 dc.l $003e007a,$007800a9,$00760062,$006e006d dc.l $00ab00bb,$002f0000,$00000000,$00000000 dc.l $00000000,$00000000,$000d0000,$009f0000 dc.l $00000000,$00000000,$00960097,$00990098 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$000000a3 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $007e0021,$00400023,$00240025,$005e0026 dc.l $002a0028,$0029005f,$002b00a6,$00000000 dc.l $00000000,$00c90000,$00000000,$00000000 dc.l $00000000,$00c5005e,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$00000000 dc.l $0000003a,$0022002a,$00000000,$00000000 dc.l $003e0000,$00000000,$00000000,$00000000 dc.l $003c003e,$003f0000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$009e0000 dc.l $00000000,$00000000,$009a009b,$009d009c dc.l $00000000,$00000000,$00000000,$00000000 dc.l $00000000,$00000000,$00000000,$000000a4 blk.b 6720 kbd_buffer: dc.b 0,0 ; Head & Tail ptr ds.w 256 ; Buffer main_contrace: dc.w 0 ; Trace flag main_configscr: dc.l 0 ; Ptr to bpl for configscr main_conintena: dc.w 0 ; Config old intena main_conintreq: dc.w 0 ; Config old intreq main_condmacon: dc.w 0 ; Config old dma main_configsr: dc.w 0 ; Int status reg main_configpc: dc.l 0 ; Int userpc main_configregs:blk.l 16 ; Registers a7-d0 main_configexit:dc.w 0 ; Set to 1 to close con screen main_configscreen:dc.w 0 ; Flag to indicate if config ENDIF ENDIF ; main_debugoff ************************************************************************* * System related data * ************************************************************************* main_readakey: dc.w 0 ; Flag for keyread main_vectorlist: IFD main_textvaron dc.l main_contxt21,0 ; 1 User (Text ptr,PC add) dc.l main_contxt22,0 ; 2 Bus dc.l main_contxt23,0 ; 3 Address dc.l main_contxt24,2 ; 4 Illegal dc.l main_contxt25,0 ; 5 Div dc.l main_contxt26,0 ; 6 CHK dc.l main_contxt27,0 ; 7 TRAPV dc.l main_contxt28,0 ; 8 Privilege dc.l main_contxt29,0 ; 9 Trace dc.l main_contxt30,2 ; 10 Axxx dc.l main_contxt31,2 ; 11 Fxxx dc.l main_contxt32,0 ; 12 Requierment no ok dc.l main_contxt33,0 ; 13 Level 7 external int dc.l main_contxt34,0 ; 14 End of program dc.l main_contxt35,0 ; 15 Error loading file ENDIF main_counter2: dc.l 0 main_usersr: dc.w 0 ; Int status reg main_userpc: dc.l 0 ; Int userpc main_registers: blk.l 16 ; Registers a7-d0 main_oldvectors:blk.l 17 ; Space for system vectors main_oldintena: dc.w 0 ; saved intena main_oldintreq: dc.w 0 ; saved intreq main_olddmacon: dc.w 0 ; saved dmacon main_oldadkcon: dc.w 0 ; saved adkcon main_oldactscreen:dc.l 0 ; Saved actscreen main_oldcopper1:dc.l 0 ; Ptr to syscop 1 main_oldcopper2:dc.l 0 ; Ptr to syscop 2 main_oldbeamcon:dc.w 0 ; Old beamcontrol bits main_novbl: dc.w 0 ; Clr to run VBL main_forcedebug:dc.w 0 ; Not 0=Debug mode forced ENDIF ; main_systemon (VERY large IF) main_printok: dc.b 0 ; Print flag main_conuse: dc.b 0 ; Console use flag main_gfxhandler:dc.l 0 ; Graphics handler main_erraddy: dc.l 0 ; On fail jump to addy.. main_errsp: dc.l 0 ; On fail new sp main_argv: dc.l 0 ; Ptr to arguments main_cachereg: dc.l 0 ; Cache reg ptr main_cacheok: dc.w 0 ; Ok 2 reset cache ? IFND main_short test: blk.l 16 ; Test block ENDIF IFND main_skipsysinfo main_processor: dc.w 0 ; Processor 0=00,1=10 etc main_coproc: dc.w 0 ; Math coprocessor 1=Yes main_mmu: dc.w 0 ; MMU 1=Yes main_aga: dc.w 0 ; AGA chipset 1=Yes main_ecs: dc.w 0 ; ECH chipset 1=Yes main_chipmem: dc.l 0 ; Chip mem main_fastmem: dc.l 0 ; Fast mem main_availfast: dc.l 0 ; Largest Fast main_availchip: dc.l 0 ; Largest chip main_refresh: dc.w 0 ; VBL Refresh rate main_powerfreq: dc.w 0 ; Power frequency main_sysflags: dc.w 0 ; System flags main_ok2run: dc.w 0 ENDIF IFND main_short main_argcount: dc.l 0 main_arglist: blk.l 16 main_timer2: dc.l 0 ; Last timer value main_savecount: dc.l 0 main_savecount2:dc.l 0 ENDIF ************************************************************************* * Text related data * ************************************************************************* main_lastkey: dc.b 0 main_doslibname: dc.b 'dos.library',0 ; Doslib name main_gfxlibname: dc.b 'graphics.library',0 ; GfxLib name main_consolname: dc.b 'con:0/0/640/256/' ; Console name main_progname: IFND main_programname dc.b 'NoName',0 ; Program name ELSE main_programname ; Own prog name dc.b 0 ENDIF IFD main_textvaron even main_powptr: dc.l main_txtpow50 ; Power freq text ptr main_refreshptr:dc.l main_txtvbl50 ; Ptr to refresh rate text main_gfxptr: dc.l main_txtgfxorg ; Ptr to Gfx chip text main_procptr: dc.l main_txt68000 ; Processor text ptr main_coprocptr: dc.l main_txtnone ; Math coproc. text ptr main_mmuptr: dc.l main_txtnone ; MMU text ptr main_contxt21: dc.b 'User ',0 main_contxt22: dc.b 'Bus error ',0 main_contxt23: dc.b 'Address error ',0 main_contxt24: dc.b 'Illegal instruction ',0 main_contxt25: dc.b 'Division by zero error ',0 main_contxt26: dc.b 'CHK command ',0 main_contxt27: dc.b 'TRAPV command ',0 main_contxt28: dc.b 'Privilege violation ',0 main_contxt29: dc.b 'Trace ',0 main_contxt30: dc.b 'Axxx command emulation ',0 main_contxt31: dc.b 'Fxxx command emulation ',0 main_contxt32: dc.b 'Hardware to lame =8) ',0 main_contxt33: dc.b 'Level 7 external break ',0 main_contxt34: dc.b 'End of program reached ',0 main_contxt35: dc.b 'Error loading file ',0 main_txtnoreq: dc.b 10,13,' No requierments needed',10,13,0 main_txtreqpass:dc.b 10,13,10,13,' Requirement test passed.',10,13,0 main_txtreqfault:dc.b 10,13,10,13,' Requirement test failed !!! (lamer:)' dc.b 10,13,0 main_txthi: dc.b '-- Hardware Info --------------------------------' dc.b 0 main_txtreq: dc.b '-- Hardware Requirements ------------------------' dc.b 0 main_txtendc: dc.b '-- Exit Info ------------------------------------' dc.b 10,13,' Program terminated by: ',0 main_txtafter: dc.b 10,13,' Total running length: ',0 main_txtminute:dc.b ' minute ',0 main_txtminutes:dc.b ' minutes ',0 main_txtsecond: dc.b ' second',0 main_txtseconds:dc.b ' seconds',0 main_txtand: dc.b 'and ',0 main_txtnonetime:dc.b '0 seconds',0 main_txtend: dc.b 10,13 main_txtblank: dc.b '-------------------------------------------------' dc.b 10,13,0 main_txtplus: dc.b '+ ',0 main_txtpassed: dc.b '.. passed',0 main_txtfault: dc.b '.. failed',0 main_txtecsplus:dc.b 'ECS+ ',0 main_txtagaplus:dc.b 'AGA+ ',0 main_txt68000: dc.b '68000',0 main_txt68010: dc.b '68010',0 main_txt68020: dc.b '68020',0 main_txt68030: dc.b '68030',0 main_txt68040: dc.b '68040',0 main_txt68060: dc.b '68060',0 main_txt68881: dc.b '68881',0 main_txt68882: dc.b '68882',0 main_txt68040b: dc.b '68040 built in',0 main_txt68060b: dc.b '68060 built in',0 main_txt68851: dc.b '68851',0 main_txtvbl50: dc.b 'PAL (50 Hz) ',0 main_txtvbl60: dc.b 'NTSC (60 Hz) ',0 main_txtpow50: dc.b '50 Hz',0 main_txtpow60: dc.b '60 Hz',0 main_txtgfxorg: dc.b 'Original Denise (8362)',0 main_txtgfxecs: dc.b 'Extended chipset (ECS Denise 8373)',0 main_txtgfxaga: dc.b 'AGA chipset (Lisa)',0 main_txtkb: dc.b 'kb ',0 main_txtfast: dc.b 10,13,' Fast-RAM needed: ',0 main_txtchip: dc.b 10,13,' Chip-RAM needed: ',0 main_txtpower: dc.b 10,13,' Power frequency: ',0 main_txtproc: dc.b 10,13,' Processor: ',0 main_txtcoproc: dc.b 10,13,' Math processor: ',0 main_txtmmu: dc.b 10,13,' MMU: ',0 main_txtaga: dc.b 10,13,' Graphic chipset: ',0 main_txtvbl: dc.b 10,13,' Video frequency: ',0 main_txtmemchip:dc.b 10,13,10,13,' Chipmem: ',0 main_txtmemfast:dc.b ' kb',10,13,' Fastmem: ',0 main_txtcache: dc.b ' All caches disabled.',0 main_txtnone: dc.b 'None',0 main_txtlf: dc.b 10,13,0 main_txtkblf: dc.b ' kb',10,13,0 main_txtdec: dc.b 0,0,0,0,0,0,0,0,0,0,0,0 even ENDIF even ENDIF cnop 8,8 main_start: