************************************************* *** MemPeeker v1.0 by AnChoR of Therapy 1996. *** ************************************************* incdir sys:assembler/includes/ include lvo3.0/exec_lib.i include lvo3.0/graphics_lib.i include lvo3.0/dos_lib.i T_RepeatDelay equ 20 T_RepeatSpeed equ 1 section boot,code J: movem.l d0-a6,-(sp) move.l 4.w,a6 lea dosname(pc),a1 jsr _LVOOldOpenLibrary(a6) move.l d0,dosbase move.l d0,a5 move.l #MPName,d1 moveq #-1,d2 lea J-4(pc),a0 move.l (a0),d3 move.l d3,Segment clr.l (a0) move.l #4096,d4 jsr _LVOCreateProc(a5) movem.l (sp)+,d0-a6 rts dosname: dc.b `dos.library`,0 dc.b `$VER: ` MPName: dc.b `MemPeeker v1.0`,0,0 section main,code j: move.l #M_MenuPic,d0 lea M_Logo+2,a0 bsr wr bsr M_OpenRomFont s: btst #10,$dff016 beq s x: btst #6,$bfe001 beq x bsr T_OpenKeyboard move.w #$20,$dff096 ; sprs off move.l #M_Copper,$dff080 M_MainLoop: move.l GfxBase(pc),a6 jsr _LVOWaitTOF(a6) bsr T_KeyboardHandler move.b T_KeyTable,d0 cmpi.b #$52,d0 beq M_DDFChange cmpi.b #$53,d0 beq M_DDFChange2 cmpi.b #$54,d0 beq M_ModChg cmpi.b #$55,d0 beq M_HSChg cmpi.b #$56,d0 beq M_ScrlChg cmpi.b #$57,d0 beq M_ResChg cmpi.b #$58,d0 beq M_LckChg cmpi.b #$59,d0 beq M_SrvChg cmpi.b #$5f,d0 beq M_ResetValues cmpi.b #$50,d0 beq M_DiwStrtChg cmpi.b #$51,d0 beq M_DiwStopChg M_Cont: bsr M_MouseHandler bsr M_SettingScreen move.l M_Lock(pc),M_Ide01+11 move.l M_Resident(pc),M_Ide01+27 move.l M_Res(pc),M_Ide01-5 bsr M_RenderMenu btst #6,$bfe001 beq M_Exit btst #10,$dff016 bne M_MainLoop M_Exit: bsr T_CloseKeyboard lea GfxName(pc),a1 move.l 4.w,a6 jsr _LVOOldOpenLibrary(a6) move.l 38(a0),$dff080 move.w #$8020,$dff096 cmpi.l #` ON `,M_Resident bne M_X move.l $6c.w,M_Old+2 move.l #M_Interrupt,$6c.w clr.l Message M_WM: tst.l Message beq M_WM bra s M_X: move.l dosbase(pc),a6 move.l Segment(pc),d1 jsr _LVOUnLoadSeg(a6) move.l a6,a1 move.l 4.w,a6 jsr _LVOCloseLibrary(a6) move.l GfxBase(pc),a1 jsr _LVOCloseLibrary(a6) moveq #0,d0 rts GfxBase: dc.l 0 dosbase: dc.l 0 Message: dc.l 0 Segment: dc.l 0 M_Interrupt: movem.l d0-a6,-(sp) btst #10,$dff016 bne M_NoEnter btst #6,$bfe001 bne M_NoEnter move.l M_Old+2(pc),$6c.w st Message M_NoEnter: movem.l (sp)+,d0-a6 M_Old: jmp 0 M_DiwStrtChg: bsr T_KeyCheck tst.b d0 bne M_Cont lea M_DiwStrt+1(pc),a0 M_In: moveq #1,d0 tst.b T_AltKey beq M_DSCW subq.l #1,a0 M_DSCW: tst.b T_ShiftKey beq M_DW0 neg.b d0 M_DW0: add.b d0,(a0) bra M_Cont M_DiwStopChg: bsr T_KeyCheck tst.b d0 bne M_Cont lea M_DiwStop+1(pc),a0 bra M_In M_ResetValues: move.l #`LOW `,M_Res move.l #$2c812cc1,M_DiwStrt move.l #$003800d0,M_DdfStrt clr.w M_Modulo clr.w M_Fetch clr.w M_Scroll bra M_Cont M_SrvChg: bsr T_KeyCheck tst.b d0 bne M_Cont cmpi.l #` ON `,M_Resident beq M_SrvIsOn move.l #` ON `,M_Resident bra M_Cont M_SrvIsOn: move.l #`OFF `,M_Resident bra M_Cont M_LckChg: bsr T_KeyCheck tst.b d0 bne M_Cont cmpi.l #`MOVE`,M_Lock beq M_LockIsOn move.l #`MOVE`,M_Lock bra M_Cont M_LockIsOn: move.l #`STOP`,M_Lock bra M_Cont M_DDFChange: bsr T_KeyCheck tst.b d0 bne M_Cont moveq #1,d0 tst.b T_ShiftKey beq M_DCW0 neg.w d0 M_DCW0: add.w d0,M_DdfStrt bra M_Cont M_DDFChange2: bsr T_KeyCheck tst.b d0 bne M_Cont moveq #1,d0 tst.b T_ShiftKey beq M_DCW1 neg.w d0 M_DCW1: add.w d0,M_DdfStop bra M_Cont M_ModChg: bsr T_KeyCheck tst.b d0 bne M_Cont moveq #1,d0 tst.b T_ShiftKey beq M_DCW2 neg.w d0 M_DCW2: add.w d0,M_Modulo bra M_Cont M_HSChg: bsr T_KeyCheck tst.b d0 bne M_Cont moveq #1,d0 tst.b T_ShiftKey beq M_DCW3 neg.w d0 M_DCW3: add.w d0,M_Fetch bra M_Cont M_ScrlChg: bsr T_KeyCheck tst.b d0 bne M_Cont moveq #1,d0 tst.b T_ShiftKey beq M_DCW4 neg.w d0 M_DCW4: add.w d0,M_Scroll bra M_Cont M_ResChg: bsr T_KeyCheck tst.b d0 bne M_Cont cmpi.l #`LOW `,M_Res beq M_ResToHigh cmpi.l #`HIGH`,M_Res beq M_ResToSuper move.l #`LOW `,M_Res move.w #40,M_ResNum bra M_Cont M_ResToHigh: move.l #`HIGH`,M_Res move.w #80,M_ResNum bra M_Cont M_ResToSuper: move.l #`PROD`,M_Res move.w #160,M_ResNum bra M_Cont wr: SWAP D0 MOVE.W D0,(A0)+ SWAP D0 ADDQ.L #2,A0 MOVE.W D0,(A0)+ addq.l #2,a0 RTS M_RenderMenu: lea M_MenuText(pc),a0 lea M_Buffer,a3 lea M_DiwStrt(pc),a1 bsr T_RawDo lea M_Buffer,a6 lea M_MenuPic+81,a5 move.l a5,a4 moveq #0,d7 M_RMLP: moveq #0,d0 move.b (a6)+,d0 bmi M_MenuOk cmpi.b #10,d0 bne M_W0 addi.l #80*8,d7 ; sorváltás move.l a5,a4 addi.l d7,a4 bra M_RMLP M_W0: move.l a4,a0 bsr M_PutChar addq.l #1,a4 bra M_RMLP M_MenuOk: lea M_MenuPic+1504-16,a5 M_W1: moveq #0,d0 move.b (a6)+,d0 beq M_MenuFull move.l a5,a0 bsr M_PutZoomChar addq.l #4,a5 bra M_W1 M_MenuFull: rts M_PutZoomChar: move.l fontptr(pc),a1 ; text print moveq #0,d1 move.w fontmod(pc),d4 subi.l #32,d0 addi.l d0,a1 moveq #7,d0 M_PZL2: moveq #0,d1 ; original moveq #0,d3 ; zoomed move.b (a1),d1 moveq #7,d2 ror.l #7,d1 M_PZCL: andi.b #1,d1 moveq #3,d5 M_SLLP: lsl.l #1,d3 ; scroll left or.b d1,d3 ; copy bit dbf d5,M_SLLP rol.l #1,d1 dbf d2,M_PZCL move.l d3,(a0) addi.l #80,a0 move.l d3,(a0) addi.l #80,a0 addi.l d4,a1 dbf d0,M_PZL2 rts T_RawDo: ********** a0-formatstring a1-data a3-outputbuffer ********** move.l 4.w,a6 lea T_StuffChar(pc),a2 jmp _LVORawDoFmt(a6) T_StuffChar: move.b d0,(a3)+ rts M_OpenRomFont: MOVE.L 4.W,A6 LEA.L GfxName(PC),A1 JSR _LVOOldOpenLibrary(A6) move.l d0,GfxBase MOVE.L d0,A6 LEA TxtAttr(PC),A0 JSR _LVOOpenFont(A6) MOVE.L D0,A1 MOVE.L 34(A1),fontptr MOVE.W 38(A1),fontmod JMP _LVOCloseFont(A6) TxtAttr dc.l fntname dc.w 8 dc.b 0,0 GfxName dc.b 'graphics.library',0 even fntname dc.b 'topaz.font',0,0 fontptr dc.l 0 fontmod dc.w 0 M_PutChar: move.l fontptr(pc),a1 ; text print moveq #0,d1 move.w fontmod(pc),d1 subi.l #32,d0 addi.l d0,a1 moveq #7,d0 M_PCLP: move.b (a1),(a0) addi.l d1,a1 addi.l #80,a0 dbf d0,M_PCLP rts M_SettingScreen: cmpi.l #`LOW `,M_Res beq M_ResIsLow cmpi.l #`HIGH`,M_Res beq M_ResIsHigh move.w #$1240,M_R+2 bra M_SCont M_ResIsLow: move.w #$1200,M_R+2 bra M_SCont M_ResIsHigh: move.w #$9200,M_R+2 M_SCont: andi.l #$1fffff,M_Address moveq #6,d0 lea M_Set+2,a0 lea M_DiwStrt(pc),a1 M_SSLP: move.w (a1)+,(a0)+ addq.l #2,a0 dbf d0,M_SSLP move.l M_Address(pc),d0 lea M_Peek+2,a0 bra wr M_MouseHandler: cmpi.w #`ST`,M_Lock ; on ? beq M_MHX moveq #0,d0 move.b $dff00b,d0 move.w VX(pc),d1 move.w d0,VX sub.b d1,d0 bpl Mu10 neg.b d0 add.l d0,M_Address bra Mu20 Mu10: sub.l d0,M_Address Mu20: moveq #0,d0 move.b $dff00a,d0 move.w VY(pc),d1 move.w d0,VY sub.b d1,d0 bpl.s Mu30 neg.b d0 sub.w d0,d1 mulu M_ResNum(pc),d0 add.l d0,M_Address M_MHX: rts Mu30: mulu M_ResNum(pc),d0 sub.l d0,M_Address rts VX: dc.w 0 VY: dc.w 0 T_KeyboardHandler: bsr T_ReadKeyMatrix bsr T_MakeKeyStates bsr T_KeyHandler clr.l T_ShiftKey ; init clr.l T_AmigaKey ; init clr.l T_AltKey ; init moveq #7,d1 lea T_KeyTable,a0 T_KHL0: move.b (a0)+,d0 bsr T_CheckQualifiers dbf d1,T_KHL0 rts T_CheckQualifiers: cmpi.b #$60,d0 beq T_CQW0 cmpi.b #$61,d0 beq T_CQW0 cmpi.b #$62,d0 beq T_CQW0 T_CQC0: cmpi.b #$64,d0 beq T_CQW1 cmpi.b #$65,d0 beq T_CQW1 T_CQC1: cmpi.b #$66,d0 beq T_CQW2 cmpi.b #$67,d0 beq T_CQW2 T_CQC2: cmpi.b #$63,d0 bne T_CQW3 move.w #-1,T_CTRLKey move.b #-1,-(a0) addq.l #1,a0 T_CQW3: rts T_CQW0: move.w #-1,T_ShiftKey move.b #-1,-(a0) addq.l #1,a0 bra T_CQC0 T_CQW1: move.w #-1,T_AltKey move.b #-1,-(a0) addq.l #1,a0 bra T_CQC1 T_CQW2: move.w #-1,T_AmigaKey move.b #-1,-(a0) addq.l #1,a0 bra T_CQC2 T_OpenKeyboard: movem.l 4,a6 jsr -$29a(a6) ; Create MsgPort move.l d0,T_MsgPort move.l d0,a0 move.l #5000,d0 ; Size jsr -$28e(a6) ; CreateIoRequest move.l d0,T_IoReq lea KeyboardName(pc),a0 moveq #0,d0 moveq #0,d1 jmp -444(a6) ; OpenDevice KeyboardName: dc.b `keyboard.device`,0 T_ReadKeyMatrix: move.l 4.w,a6 move.l T_IoReq(pc),a1 move.w #10,$1c(a1) ; command=KBD_READMATRIX move.l #13,$24(a1) ; length move.l #T_KeyBuffer,$28(a1) ; data jmp -$1c8(a6) ; DoIo T_CloseKeyboard: move.l 4.w,a6 move.l T_IoReq(pc),a1 jsr -450(a6) ; CloseDevice move.l T_IoReq(pc),a0 jsr -$294(a6) ; DeleteIoRequest move.l T_MsgPort(pc),a0 jmp -$2a0(a6) ; DeleteMsgPort T_KeyCheck: cmpi.b T_Key(pc),d0 beq T_KHNo move.b d0,T_Key move.w #T_RepeatDelay,T_RepeatCounter ; init clr.w T_Repeat ; off moveq #0,d0 rts T_KHNo: tst.w T_Repeat beq T_RepCome tst.w T_RepeatCounter beq T_RepOn bra T_RW0 T_RepCome: tst.w T_RepeatCounter beq T_RepOn T_RW0: subq.w #1,T_RepeatCounter moveq #-1,d0 rts T_RepOn: move.w #T_RepeatSpeed,T_RepeatCounter ; init move.w #-1,T_Repeat ; on moveq #0,d0 rts T_KeyHandler: moveq #-1,d0 cmpi.b T_Key(pc),d0 beq T_KCX moveq #0,d0 moveq #0,d1 move.b T_Key(pc),d0 move.b T_Key(pc),d1 andi.b #$f0,d1 lsr.w #4,d1 ; word # andi.w #$f,d0 ; bit # lea T_KeyBuffer,a0 move.w (a0,d1.l*2),d2 move.w d2,d3 lsl.w #8,d3 lsr.w #8,d2 move.b d2,d3 btst d0,d3 bne T_KCX move.b #-1,T_Key T_KCX: rts T_MakeKeyStates: bsr T_InitKeyTable lea T_KeyTable,a0 lea T_KeyBuffer,a1 moveq #0,d1 ; words T_MKS0: moveq #0,d0 ; bits move.w (a1,d1.l*2),d3 move.b d3,d4 lsl.w #8,d4 lsr.w #8,d3 move.b d3,d4 T_MKS1: btst d0,d4 beq T_MKS3 move.w d1,d2 lsl.w #4,d2 addi.b d0,d2 ; make scan code move.b d2,(a0)+ T_MKS3: addq.w #1,d0 cmpi.w #16,d0 bne T_MKS1 addq.w #1,d1 cmpi.w #8,d1 bne T_MKS0 rts T_InitKeyTable: move.l #-1,T_KeyTable move.l #-1,T_KeyTable+4 move.l #-1,T_KeyTable+8 move.l #-1,T_KeyTable+12 rts ********************* ***** Data area ***** ********************* M_DiwStrt: dc.w $2c81 M_DiwStop: dc.w $2cc1 M_DdfStrt: dc.w $38 M_DdfStop: dc.w $d0 M_Modulo: dc.w 0 M_Fetch: dc.w 0 M_Scroll: dc.w 0 M_Address: dc.l 0 M_Res: dc.l `LOW ` M_Lock: dc.l `MOVE` M_Resident: dc.l `OFF ` M_ResNum: dc.w 40 T_ShiftKey: dc.l 0 T_AmigaKey: dc.l 0 T_CTRLKey: dc.l 0 T_AltKey: dc.l 0 T_MsgPort: dc.l 0 T_IoReq: dc.l 0 T_Key: dc.l 0 T_Repeat: dc.l 0 T_RepeatCounter: dc.l 0 M_MenuText: dc.b `DIWSTRT-F1 %04x ` dc.b `DIWSTOP-F2 %04x ` dc.b `DDFSTRT-F3 %04x ` dc.b `DDFSTOP-F4 %04x ` dc.b `BPL1MOD-F5 %04x`,10 dc.b `DATFTCH-F6 %04x ` dc.b `HRDSCRL-F7 %04x ` dc.b `RESOLUT-F8 .... ` M_Ide01: dc.b `PICLOCK-F9 .... SURVIVE-F0 ....`,10,10 dc.b `MemPeeker v1.0 By AnChoR of Therapy 1996.`,-1,`%08lx`,0 section data,data_c M_Copper: dc.w $100,$0200 ; pic off dc.w $96,$20 ; sprites off dc.w $180,$0,$182,0 dc.w $8e,$2c79,$90,$2cc1,$92,$38,$94,$d0 dc.w $108,0 ; modulo dc.w $10a,0 ; modulo dc.w $102,0 ; hardver scroll dc.w $1fc,0 ; fetch M_Logo: dc.w $e0,0,$e2,0,$e4,0,$e6,0 dc.w $100,$9200 ; pic on dc.w $2407,$fffe,$180,$320 dc.w $2507,$fffe,$180,$430 dc.w $2607,$fffe,$180,$540 dc.w $2707,$fffe,$180,$651 dc.w $2807,$fffe,$180,$762 dc.w $2907,$fffe,$180,$873 dc.w $2a07,$fffe,$180,$984 dc.w $2b07,$fffe,$180,$a95 dc.w $2d07,$fffe,$182,$060 dc.w $2e07,$fffe,$182,$251 dc.w $2f07,$fffe,$182,$442 dc.w $3007,$fffe,$182,$633 dc.w $3107,$fffe,$182,$824 dc.w $3207,$fffe,$182,$a15 dc.w $3307,$fffe,$182,$c06 dc.w $3507,$fffe,$182,$c10 dc.w $3607,$fffe,$182,$d10 dc.w $3707,$fffe,$182,$d20 dc.w $3807,$fffe,$182,$e20 dc.w $3907,$fffe,$182,$e30 dc.w $3a07,$fffe,$182,$f30 dc.w $3b07,$fffe,$182,$f40 dc.w $3d07,$fffe,$182,$000 ; address top dc.w $3e07,$fffe,$182,$110 dc.w $3f07,$fffe,$182,$220 dc.w $4007,$fffe,$182,$330 dc.w $4107,$fffe,$182,$440 dc.w $4207,$fffe,$182,$550 dc.w $4307,$fffe,$182,$660 dc.w $4507,$fffe,$182,$552 dc.w $4607,$fffe,$182,$334 dc.w $4707,$fffe,$182,$216 dc.w $4807,$fffe,$182,$308 dc.w $4907,$fffe,$182,$40a dc.w $4a07,$fffe,$182,$50c dc.w $4b07,$fffe,$182,$60e dc.w $4d07,$fffe,$100,$200 dc.w $4e07,$fffe,$180,$984,$182,$fff dc.w $4f07,$fffe,$180,$873 dc.w $5007,$fffe,$180,$762 dc.w $5107,$fffe,$180,$651 dc.w $5207,$fffe,$180,$540 dc.w $5307,$fffe,$180,$430 dc.w $5407,$fffe,$180,$320 dc.w $5507,$fffe,$180,$210 M_Set: dc.w $8e,0 dc.w $90,0 dc.w $92,0 dc.w $94,0 dc.w $108,0 dc.w $1fc,0 dc.w $102,0 dc.w $5807,$fffe,$180,$f00 M_Peek: dc.w $e0,0,$e2,0 M_R: dc.w $100,$1200 dc.w $5907,$fffe,$180,0,$182,$2a8 dc.l $fffffffe section b,bss M_Buffer: ds.b 256 T_KeyTable: ds.b 16 T_KeyBuffer: ds.b 256 section menu,bss_c M_MenuPic: ds.b 80*36