;############################################### ;### SPECIAL WARNING FOR NORMAL PROGRAMMERS: ### ;############################################### ;###### Please don't read this source !!! ###### ;##### It is completely ALTERNATIVELY made ##### ;### from scratch. Reading such thing may and ## ;### possibly WILL leave permanent damage to ### ;################ your _mind_. ################# ;##### Special recommendation for Lemming. ##### ;############################################### ;DEBUG equ 1 include "ssmac.h" WARN_DDR_MASK equ $FFF800FF WARN_PR_MASK equ $00000001 ciaa equ $bfe001 ciab equ $bfd000 CIABaseA4 equ ciab BaseA4 equ $dff000 TEXT_PEN equ 1 BGND_PEN equ 0 dv.b ST_joy0daty dv.b ST_joy0datx dv.b ST_joy1daty dv.b ST_joy1datx dv.b ST_pot0daty dv.b ST_pot0datx dv.b ST_pot1daty dv.b ST_pot1datx dv.l DefCIAIO dv.l SigMask dv.l MyWindow dv.l StdFont dv.l potgobase dv.l diskbase dv.l miscbase dv.l OrigWPtr dv.l VisualInfo dv.w GameAlloced dbuf ScrTitBuf,80 dv.b CleanServ dv.b Signaled dv.b InitCounters dv.b DiskAlloc dv.b PortAdd start move.l 4.w,a6 addq.b #1,TDNestCnt(a6) gett RzPortName,a1 call FindPort tst.l d0 beq.s NoPortFound move.l d0,a1 move.l MP_SIGTASK(a1),a1 moveq #1<<6,d0 rol.l #8,d0 call Signal call Permit dtl ,a0 bra.s SSExitError NoPortFound lea RzPort(pc),a1 move.l ThisTask(a6),MP_SIGTASK(a1) call AddPort call Permit stv PortAdd lea StdAttr(pc),a0 call gfx,OpenFont put.l d0,StdFont beq.s OpenWinFail dtl ,a1 call exec,OpenResource put.l d0,diskbase beq.s OpenWinFail dtl ,a1 call OpenResource put.l d0,miscbase beq.s OpenWinFail sub.l a0,a0 call intuition,LockPubScreen move.l d0,ScrLock bne.s LockScrOK OpenWinFail dtl ,a0 SSExitError jump ss,ExitError LockScrOK move.l d0,a0 sub.l a1,a1 call gadtools,GetVisualInfoA put.l d0,VisualInfo beq.s OpenWinFail move.l d0,d5 lea AGamePort(pc),a0 call CreateContext lea GNGadgets(pc),a3 clr.l -(sp) clr.l -(sp) push #GA_Immediate GGNG_Loop tst.l d0 beq.s OpenWinFail move.l d0,a0 move.l a3,a1 tst.b gng_GadgetID+1(a1) bmi.s GGNG_Skip move.l sp,4(sp) GGNG_Skip lea gng_VisualInfo(a3),a3 move.l d5,(a3)+ moveq #BUTTON_KIND,d0 move.l sp,a2 call CreateGadgetA tst.w (a3) bne.s GGNG_Loop tst.l d0 beq.s OpenWinFail lea 1*8+4(sp),sp lea NewMyWindow(pc),a0 ;;; move.w #CUSTOMSCREEN,nw_Type(a0) clr.l -(sp) dt ScrTitle, tpea ScrTitle push #WA_ScreenTitle push sp push #WA_AutoAdjust moveq #0,d0 move.w NewMyWindow+nw_Width(pc),d0 push d0 push #WA_InnerWidth move.w NewMyWindow+nw_Height(pc),d0 push d0 push #WA_InnerHeight move.l sp,a1 call intuition,OpenWindowTagList put.l d0,MyWindow beq OpenWinFail get.l sv_thistask,a0 put.l pr_WindowPtr(a0),OrigWPtr move.l d0,pr_WindowPtr(a0) lea 4*8+4(sp),sp move.l d0,a0 move.l wd_UserPort(a0),d6 move.l wd_RPort(a0),d2 sub.l a1,a1 call gadtools,GT_RefreshWindow lea BorList(pc),a2 move.w (a2)+,d0 get.l intuitionbase,a6 NextBorder lea (a2,d0.w),a1 move.l d2,a0 moveq #0,d0 moveq #0,d1 call DrawBorder move.w (a2)+,d0 bne.s NextBorder get.l StdFont,a0 move.l d2,a1 call gfx,SetFont move.l d2,a0 lea MyWinITexts(pc),a1 moveq #0,d0 moveq #0,d1 call intuition,PrintIText dtl ,a1 call exec,OpenResource put.l d0,potgobase beq OpenWinFail get.l intuitionbase,a6 bsr ActivateScreen call ss,TrackSignal moveq #0,d2 bset d0,d2 put.l d2,SigMask move.l CIABaseA4Ptr(pc),a4 move.b ciaa+ciaddra-CIABaseA4(a4),d0 rol.w #8,d0 move.b ciaa+ciaddrb-CIABaseA4(a4),d0 rol.l #8,d0 move.b ciab+ciaddra-CIABaseA4(a4),d0 rol.l #8,d0 move.b ciab+ciaddrb-CIABaseA4(a4),d0 put.l d0,DefCIAIO stv.b CleanServ moveq #INTB_VERTB,d0 lea IntStruct(pc),a1 move.l v,IS_DATA(a1) call exec,AddIntServer LoopIDCMP lea SetSelected(pc),a1 bsr DoRoutUpdate get.l MyWindow,a2 move.l wd_RPort(a2),d3 move.l d3,a1 moveq #TEXT_PEN,d0 call gfx,SetAPen move.l d3,a1 moveq #BGND_PEN,d0 call SetBPen move.l joy0dat(a4),d2 geta ST_joy0daty,a0 moveq #64,d0 moveq #125,d1 lea G12l+gg_GadgetID(pc),a2 lea G12r+gg_GadgetID(pc),a3 bsr ProcCounterLR ;joy0daty moveq #64,d0 moveq #114,d1 lea G11l+gg_GadgetID(pc),a2 lea G11r+gg_GadgetID(pc),a3 bsr ProcCounterLR ;joy0datx move.w #216,d0 moveq #125,d1 lea G22l+gg_GadgetID(pc),a2 lea G22r+gg_GadgetID(pc),a3 bsr ProcCounterLR ;joy1daty move.w #216,d0 moveq #114,d1 lea G21l+gg_GadgetID(pc),a2 lea G21r+gg_GadgetID(pc),a3 bsr ProcCounterLR ;joy1datx move.l pot0dat(a4),d2 moveq #64,d0 move.w #147,d1 bsr.s ProcCounter ;pot0daty moveq #64,d0 move.w #136,d1 bsr.s ProcCounter ;pot0datx move.w #216,d0 move.w #147,d1 bsr.s ProcCounter ;pot1daty move.w #216,d0 move.w #136,d1 bsr.s ProcCounter ;pot1datx stv.b InitCounters clrv.b Signaled get.l SigMask,d0 move.l d6,a0 move.b MP_SIGBIT(a0),d1 bset d1,d0 or.w #SIGBREAKF_CTRL_C!SIGBREAKF_CTRL_E,d0 call exec,Wait btst #SIGBREAKB_CTRL_C,d0 beq.s TestFlagE SSReportBreak moveq #err_break,d0 SSReportError jump ss,ReportError PC_Return tstv.b InitCounters beq.s PC_Cont cmp.l d0,d0 rts ProcCounter rol.l #8,d2 cmp.b (a0)+,d2 beq.s PC_Return PC_Cont move.l a0,d5 move.b d2,-(a0) move.l d3,a1 call Move move.l d3,a1 moveq #RP_JAM2,d0 call SetDrMd moveq #0,d0 move.b d2,d0 move.w d0,-(sp) move.l sp,a1 subq #4,sp move.l a2,d4 move.l sp,a2 dtl <%02x>,a0 call ss,FormatStr move.l d4,a2 move.l d3,a1 move.l sp,a0 moveq #2,d0 call gfx,Text addq #6,sp move.l d5,a0 move.l sp,d0 Return2 rts ActivateScreen move.l ScrLock(pc),a0 jump ScreenToFront TestFlagE btst #SIGBREAKB_CTRL_E,d0 beq.s RetryIDCMP get.l MyWindow,a0 call intuition,ActivateWindow get.l MyWindow,a0 call WindowToFront bsr.s ActivateScreen RetryIDCMP move.l d6,a0 call gadtools,GT_GetIMsg tst.l d0 beq LoopIDCMP move.l d0,a1 movem.l im_Class(a1),d2/d3/a3 call GT_ReplyIMsg btst #9,d2 ;bit(IDCMP_CLOSEWINDOW) bne.s Return2 moveq #0,d0 move.l CIABaseA4Ptr(pc),a4 btst #6,d2 ;bit(IDCMP_GADGETUP) beq.s NoGadUp move.b gg_GadgetID+1(a3),d0 addq.b #4,d0 bcc.s RetryIDCMP move.b DefCIAIO(v,d0.w),d1 add.w d0,d0 add.w CIAddrTab(pc,d0.w),a4 move.b d1,(a4) SafeSetCIA nop move.b (a4),(a4) bra.s RetryIDCMP CIAprTab dc.w ciaa+ciapra-CIABaseA4 dc.w ciaa+ciaprb-CIABaseA4 dc.w ciab+ciapra-CIABaseA4 dc.w ciab+ciaprb-CIABaseA4 CIAddrTab dc.w ciaa+ciaddra-CIABaseA4 dc.w ciaa+ciaddrb-CIABaseA4 dc.w ciab+ciaddra-CIABaseA4 dc.w ciab+ciaddrb-CIABaseA4 CIAEndTab NoGadUp btst #5,d2 ;bit(IDCMP_GADGETDOWN) beq.s RetryIDCMP move.b gg_GadgetID+1(a3),d0 beq.s RetryIDCMP subq.b #1,d0 cmp.b #64,d0 bcc.s OtherButtonDown move.w d0,d1 lsr.w #3,d0 add.w d0,d0 lea Warn_DDR_Mask(pc),a0 subq.w #8,d0 bcc.s ItsddrChange addq #4,a0 move.w CIAEndTab(pc,d0.w),d2 btst d1,(a4,d2.w) bne.s ItsddrChange CallScrBeep bsr.s DoScrBeep bra RetryIDCMP DoScrBeep move.l ScrLock(pc),a0 ;(#66) jump intuition,DisplayBeep ItsddrChange tstv.l Arg_Force bne.s NoWarnBit move.l (a0),d3 btst d1,d3 beq.s NoWarnBit mpush d0/d1/a0 dtl.lc ,a0 dt.lc dt.lc dt.lc <> dt.lc dt.lc dt.lc <> dt.lc dt.l dtl ,a2 call ss,SimpleRequest subq.l #1,d0 mpop d0/d1/a0 bne RetryIDCMP bclr d1,d3 move.l d3,(a0) NoWarnBit add.w CIAddrTab(pc,d0.w),a4 bchg d1,(a4) bra SafeSetCIA Warn_DDR_Mask dc.l WARN_DDR_MASK,WARN_PR_MASK OtherButtonDown bne.s NoWritePotgo ;+++ Pressed "Start potgo" +++ (#65) moveq #1,d0 ;START moveq #1,d1 ;START call potgo,WritePotgo bra RetryIDCMP NoWritePotgo sub.b #66,d0 bmi.s CallScrBeep bne.s NoTXD opt nochkimm ;(#67) move.b adkconr+BaseA4,d0 opt chkimm and.b #ADKF_UARTBRK>>8,d0 bchg #ADKB_UARTBRK-8,d0 lsl.b #4,d0 bset #ADKB_UARTBRK-8,d0 opt nochkimm move.b d0,adkcon+BaseA4 opt chkimm bra RetryIDCMP NoTXD subq.b #1,d0 cmp.b #8,d0 bcc.s NoPotgoBits moveq #0,d1 ;(#68)..(#75) bset d0,d1 rol.w #8,d1 get.l potgobase,a6 move.w $28(a6),d0 and.w d1,d0 eor.w d1,d0 call WritePotgo bra RetryIDCMP NoPotgoBits subq.b #8,d0 bne NoASerial moveq #MR_SERIALPORT,d2 lea ASerial+gg_GadgetID(pc),a2 dtl ,a3 DoAParallel move.l a2,d7 bsr.s ClearScrTit geta ScrTitBuf,a0 CopySerParName move.b (a3)+,(a0)+ bne.s CopySerParName lea 6(a0),a4 subq #1,a0 dtl ,a1 CopySerParSuff move.b (a1)+,(a0)+ bne.s CopySerParSuff move.l d7,a2 tst.b (a2) bne.s DoFreeSerPar lea -1(a0),a3 bsr.s SerParHalf addq.l #1,d2 bsr.s SerParHalf dtl ,a0 moveq #-1,d0 move.l d7,a2 CopySerParSucc move.b (a0)+,(a4)+ bne.s CopySerParSucc bsr SetSelected bra.s DoScrWinTitle ClearScrTit get.l MyWindow,a0 moveq #-1,d0 move.l d0,a1 sub.l a2,a2 jump intuition,SetWindowTitles DoFreeSerPar bsr.s FreeSerParRout gett GivenSys,a0 moveq #0,d0 bra.s CopySerParSucc SerParHalf move.l d2,d0 lea IntName(pc),a1 move.l 4.w,a0 addq.b #1,TDNestCnt(a0) call misc,AllocMiscResource tst.l d0 beq.s JumpExecPermit move.l d0,a0 moveq #31,d0 CopyLimName move.b (a0)+,(a3)+ dbeq d0,CopyLimName clr.b (a3) bsr.s JumpExecPermit move.l d2,d0 and.b #~1,d0 cmp.l d0,d2 beq.s DontFreeRest bsr.s JumpMiscFree DontFreeRest addq #4,sp bsr DoScrBeep DoScrWinTitle geta ScrTitBuf,a2 bra DoScrTitle FreeSerParRout move.l d2,d0 bsr.s JumpMiscFree move.l d2,d0 addq.l #1,d0 JumpMiscFree jump misc,FreeMiscResource JumpExecPermit jump exec,Permit NoASerial moveq #MR_PARALLELPORT,d2 lea AParallel+gg_GadgetID(pc),a2 dtl ,a3 subq.b #2,d0 bcs DoAParallel bne NoADisk lea ADisk+gg_GadgetID(pc),a2 tst.b (a2) bne ADiskDoFree move.l a2,d7 get.l MyWindow,a0 get.l intuitionbase,a6 cmp.w #39,LIB_VERSION(a6) bcs.s StupidGfx2 move.l a0,a3 clr.l -(sp) push sp push #WA_BusyPointer push sp push #WA_PointerDelay move.l sp,a1 call SetWindowPointerA move.l a3,a0 StupidGfx2 moveq #-1,d4 move.l d4,a1 dtl ,a2 call SetWindowTitles get.l diskbase,a6 moveq #3,d2 LoopADiskUnit move.l d2,d0 call AllocUnit tst.l d0 sne d1 move.b d1,d0 roxr.b #1,d0 roxl.b #1,d3 bsr PushSw dbra d2,LoopADiskUnit put.b d3,DiskAlloc get.l sv_thistask,a2 lea pr_MsgPort(a2),a2 RetryGetUnit lea DRUnit(pc),a1 move.l a2,a0 move.l a0,MN_REPLYPORT(a1) call disk,GetUnit tst.l d0 bne.s GotUnit move.l 4.w,a6 RetryGiveReply move.l a2,a0 call WaitPort move.l a2,a0 call GetMsg tst.l d0 beq.s RetryGiveReply bra.s RetryGetUnit GotUnit move.l d7,a2 moveq #-1,d0 bsr SetSelected dtl ,a0 move.l sp,a1 geta ScrTitBuf,a2 call ss,FormatStr lea 4*4(sp),sp get.l intuitionbase,a6 cmp.w #39,LIB_VERSION(a6) bcs.s SetTitnRet clr.l -(sp) clr.l -(sp) push #WA_Pointer move.l a3,a0 move.l sp,a1 call SetWindowPointerA lea (1*8+4)+(2*8+4)(sp),sp SetTitnRet get.l MyWindow,a0 move.l d4,a1 call SetWindowTitles bra RetryIDCMP ADiskDoFree bsr FreeDiskRes moveq #0,d0 bsr SetSelected dtl.c ,a2 dt GivenSys, DoScrTitle get.l intuitionbase,a6 moveq #-1,d4 bra.s SetTitnRet NoADisk subq.b #1,d0 bne RetryIDCMP lea AGamePort+gg_GadgetID(pc),a2 get.l potgobase,a6 tst.b (a2) bne.s ADoFreeGame move.w #$5501,d0 move.w d0,d2 call AllocPotBits and.w d2,d0 beq.s AGameFailed put.w d0,GameAlloced moveq #4,d2 ror.w #2,d0 LoopPushRol bsr.s PushRolSw dbra d2,LoopPushRol moveq #-1,d0 bsr SetSelected bsr ClearScrTit dtl ,a0 move.l sp,a1 geta ScrTitBuf,a2 call ss,FormatStr lea 5*4(sp),sp bra.s DoScrTitle PushRolSw rol.w #2,d0 scs d1 PushSw neg.b d1 ext.w d1 lsl.w #2,d1 dt dt NoMsg, gett NoMsg,a0 sub.w d1,a0 move.l (sp),a1 move.l a0,(sp) jmp (a1) AGameFailed bsr DoScrBeep dtl ,a2 bra.s DoScrTitle ADoFreeGame get.w GameAlloced,d0 clrv.w GameAlloced call FreePotBits moveq #0,d0 bsr SetSelected dtl ,a2 bra DoScrTitle FreeDiskRes call disk,GiveUnit get.b DiskAlloc,d3 ror.b #4,d3 moveq #3,d2 LoopFreeUnit rol.b #1,d3 bcc.s SkipFreeUnit move.l d2,d0 call FreeUnit SkipFreeUnit dbra d2,LoopFreeUnit rts Cleanup move.l 4.w,a6 tstv.b PortAdd beq.s NoPortAdd clrv.b PortAdd lea RzPort(pc),a1 call RemPort NoPortAdd tstv.b CleanServ beq.s NoCleanServ clrv.b CleanServ lea IntStruct(pc),a1 moveq #INTB_VERTB,d0 call RemIntServer NoCleanServ lea ADisk+gg_GadgetID(pc),a2 tst.b (a2) beq.s NoFreeDisk clr.b (a2) bsr.s FreeDiskRes NoFreeDisk lea ASerial+gg_GadgetID(pc),a2 tst.b (a2) beq.s NoFreeSerial clr.b (a2) moveq #MR_SERIALPORT,d2 bsr FreeSerParRout NoFreeSerial lea AParallel+gg_GadgetID(pc),a2 tst.b (a2) beq.s NoFreeParallel clr.b (a2) moveq #MR_PARALLELPORT,d2 bsr FreeSerParRout NoFreeParallel get.w GameAlloced,d0 beq.s NoFreeGamePort clrv.w GameAlloced call potgo,FreePotBits NoFreeGamePort get.l MyWindow,d0 beq.s NoMyWindow clrv.l MyWindow get.l sv_thistask,a0 get.l OrigWPtr,pr_WindowPtr(a0) move.l d0,a4 move.l 4.w,a6 addq.b #1,TDNestCnt(a6) ClearWinPort move.l wd_UserPort(a4),a0 call GetMsg tst.l d0 beq.s WinPortCleared move.l d0,a1 call ReplyMsg bra.s ClearWinPort WinPortCleared move.l a4,a0 moveq #0,d0 call intuition,ModifyIDCMP call exec,Permit move.l a4,a0 call intuition,CloseWindow NoMyWindow get.l StdFont,d0 beq.s NoCloseFont clrv.l StdFont move.l d0,a1 call gfx,CloseFont NoCloseFont lea AGamePort(pc),a1 move.l (a1),a0 clr.l (a1) call gadtools,FreeGadgets get.l VisualInfo,a0 clrv.l VisualInfo call FreeVisualInfo sub.l a0,a0 lea ScrLock(pc),a0 move.l (a0),a1 clr.l (a0) jump intuition,UnlockPubScreen GadTable dc.w AA0l+gg_GadgetID-*-2 dc.w AA1l+gg_GadgetID-*-2 dc.w AA2l+gg_GadgetID-*-2 dc.w AA3l+gg_GadgetID-*-2 dc.w AA4l+gg_GadgetID-*-2 dc.w AA5l+gg_GadgetID-*-2 dc.w AA6l+gg_GadgetID-*-2 dc.w AA7l+gg_GadgetID-*-2 dc.w AB0l+gg_GadgetID-*-2 dc.w AB1l+gg_GadgetID-*-2 dc.w AB2l+gg_GadgetID-*-2 dc.w AB3l+gg_GadgetID-*-2 dc.w AB4l+gg_GadgetID-*-2 dc.w AB5l+gg_GadgetID-*-2 dc.w AB6l+gg_GadgetID-*-2 dc.w AB7l+gg_GadgetID-*-2 dc.w BA0l+gg_GadgetID-*-2 dc.w BA1l+gg_GadgetID-*-2 dc.w BA2l+gg_GadgetID-*-2 dc.w BA3l+gg_GadgetID-*-2 dc.w BA4l+gg_GadgetID-*-2 dc.w BA5l+gg_GadgetID-*-2 dc.w BA6l+gg_GadgetID-*-2 dc.w BA7l+gg_GadgetID-*-2 dc.w BB0l+gg_GadgetID-*-2 dc.w BB1l+gg_GadgetID-*-2 dc.w BB2l+gg_GadgetID-*-2 dc.w BB3l+gg_GadgetID-*-2 dc.w BB4l+gg_GadgetID-*-2 dc.w BB5l+gg_GadgetID-*-2 dc.w BB6l+gg_GadgetID-*-2 dc.w BB7l+gg_GadgetID-*-2 dc.w AA0r+gg_GadgetID-*-2 dc.w AA1r+gg_GadgetID-*-2 dc.w AA2r+gg_GadgetID-*-2 dc.w AA3r+gg_GadgetID-*-2 dc.w AA4r+gg_GadgetID-*-2 dc.w AA5r+gg_GadgetID-*-2 dc.w AA6r+gg_GadgetID-*-2 dc.w AA7r+gg_GadgetID-*-2 dc.w AB0r+gg_GadgetID-*-2 dc.w AB1r+gg_GadgetID-*-2 dc.w AB2r+gg_GadgetID-*-2 dc.w AB3r+gg_GadgetID-*-2 dc.w AB4r+gg_GadgetID-*-2 dc.w AB5r+gg_GadgetID-*-2 dc.w AB6r+gg_GadgetID-*-2 dc.w AB7r+gg_GadgetID-*-2 dc.w BA0r+gg_GadgetID-*-2 dc.w BA1r+gg_GadgetID-*-2 dc.w BA2r+gg_GadgetID-*-2 dc.w BA3r+gg_GadgetID-*-2 dc.w BA4r+gg_GadgetID-*-2 dc.w BA5r+gg_GadgetID-*-2 dc.w BA6r+gg_GadgetID-*-2 dc.w BA7r+gg_GadgetID-*-2 dc.w BB0r+gg_GadgetID-*-2 dc.w BB1r+gg_GadgetID-*-2 dc.w BB2r+gg_GadgetID-*-2 dc.w BB3r+gg_GadgetID-*-2 dc.w BB4r+gg_GadgetID-*-2 dc.w BB5r+gg_GadgetID-*-2 dc.w BB6r+gg_GadgetID-*-2 dc.w BB7r+gg_GadgetID-*-2 dc.w G13l+gg_GadgetID-*-2 dc.w G13r+gg_GadgetID-*-2 dc.w G14l+gg_GadgetID-*-2 dc.w G14r+gg_GadgetID-*-2 dc.w G23l+gg_GadgetID-*-2 dc.w G23r+gg_GadgetID-*-2 dc.w G24l+gg_GadgetID-*-2 dc.w G24r+gg_GadgetID-*-2 dc.w S1l+gg_GadgetID-*-2 dc.w S2l+gg_GadgetID-*-2 dc.w G13m+gg_GadgetID-*-2 dc.w G23m+gg_GadgetID-*-2 dc.w G14m+gg_GadgetID-*-2 dc.w G24m+gg_GadgetID-*-2 ProcCounterLR bsr ProcCounter beq.s Return1ShEq ror.b #2,d2 scs d0 bsr.s ChkSelected rol.b #1,d2 scs d0 rol.b #1,d2 scs d1 eor.b d1,d0 move.l a3,a2 ChkSelected cmp.b (a2),d0 Return1ShEq beq.s Return1 SetSelected mpush d2/d3/a0/a1/a3 move.b d0,(a2) get.l MyWindow,a3 move.l wd_RPort(a3),a1 cmp.b #76,1(a2) bcc.s NoImage move.l a1,a0 lea ImgZero(pc),a1 move.w -gg_GadgetID+gg_LeftEdge(a2),d0 move.w -gg_GadgetID+gg_TopEdge(a2),d1 move.l -gg_GadgetID+gg_GadgetRender(a2),a3 cmp.l a1,a3 bne.s SS_DoInpOut tst.b (a2) beq.s SS_HaveImage lea ImgOne(pc),a1 bra.s SS_HaveImage NoImage moveq #RP_COMPLEMENT,d0 call gfx,SetDrMd move.l wd_RPort(a3),a0 moveq #3,d0 cmp.w #39,LIB_VERSION(a6) bcs.s StupidGfx call SetWriteMask ;failures ignored StupidGfxJump move.l wd_RPort(a3),a1 lea -gg_GadgetID+gg_LeftEdge(a2),a0 move.w (a0)+,d0 ;LeftEdge->xmin move.w (a0)+,d1 ;TopEdge->ymin move.w (a0)+,d2 add.w d0,d2 subq.w #1,d2 ;xmax move.w (a0),d3 add.w d1,d3 subq.w #1,d3 ;ymax call RectFill Ret_SetSelected mpop d2/d3/a0/a1/a3 Return1 rts SS_DoInpOut lea ImgInput(pc),a1 tst.b (a2) beq.s SS_HaveImage lea ImgOutput(pc),a1 SS_HaveImage call intuition,DrawImage get.l gfxbase,a6 bra.s Ret_SetSelected StupidGfx move.b d0,rp_Mask(a0) bra.s StupidGfxJump DoRoutUpdate lea CIABaseA4,a4 CIABaseA4Ptr equ *-4 lea GadTable(pc),a0 lea CIAprTab(pc),a3 moveq #7,d7 ChkCIALoop move.w (a3)+,d0 move.b (a4,d0.w),d2 bsr.s ChkEight dbra d7,ChkCIALoop get.l potgobase,a4 move.b $28(a4),d2 ;$28(potgobase)/W=Contents of POTGO/POTINP bsr.s ChkEight lea BaseA4,a4 BaseA4Ptr equ *-4 move.b potinp(a4),d2 move.b d2,d0 and.b #$05,d2 and.b #$50,d0 lsr.b #3,d0 or.b d0,d2 btst #ADKB_UARTBRK-8,adkconr(a4) sne d0 ;TXD roxr.b #1,d0 roxl.b #1,d2 btst #11-8,serdatr(a4) sne d0 ;RXD roxr.b #1,d0 roxl.b #1,d2 moveq #5,d3 bra.s Chk8Loop ChkEight moveq #7,d3 Chk8Loop move.w (a0)+,d0 lea (a0,d0.w),a2 ror.b d2 scs d0 cmp.b (a2),d0 beq.s Chk8Okay jsr (a1) Chk8Okay dbra d3,Chk8Loop rts IntRoutine tst.b Signaled(a1) bne.s IntReturnQuick move.l a1,v mpush d2-d4/d7/a2-a4 move.l sp,d4 lea DoSignal(pc),a1 bsr DoRoutUpdate move.l joy0dat(a4),d0 vcmp.l ST_joy0daty,d0 bne.s DoSignal move.l pot0dat(a4),d0 vcmp.l ST_pot0daty,d0 bne.s DoSignal bra.s IntReturn DoSignal get.l SigMask,d0 get.l sv_thistask,a1 stv.b Signaled call exec,Signal move.l d4,sp IntReturn mpop d2-d4/d7/a2-a4 IntReturnQuick move.l BaseA4Ptr(pc),a0 cmp.l d0,d0 rts IntStruct dc.l 0,0 dc.b NT_INTERRUPT,-128 dc.l IntName dc.l 0 ;IS_DATA dc.l IntRoutine IntName dc.b 'PortDiag',0 even DRUnit dc.l 0,0 dc.b NT_MESSAGE,0 dc.l IntName DRReplyPort dc.l 0 dc.w DRU_SIZE dc.l 0,0 dc.b NT_INTERRUPT,-128 dc.l IntName,0,0 ;LN_NAME,IS_DATA,IS_CODE dc.l 0,0 dc.b NT_INTERRUPT,-128 dc.l IntName,0,0 ;LN_NAME,IS_DATA,IS_CODE dc.l 0,0 dc.b NT_INTERRUPT,-128 dc.l IntName,0,0 ;LN_NAME,IS_DATA,IS_CODE RzPort dc.l 0,0 dc.b NT_MSGPORT,-128 dc.l RzPortName dc.b PA_IGNORE,0 dc.l 0 RzPortHead dc.l RzPortTail RzPortTail dc.l 0,RzPortHead dc.b NT_MESSAGE,0 dt RzPortName, GNGadgets GNGDefaultAA dc.w 44,78,72,13 dc.l DefaultTxt,StdAttr dc.w 252 dc.l PLACETEXT_IN,0 GNGDefaultAB dc.w 196,78,72,13 dc.l DefaultTxt,StdAttr dc.w 253 dc.l PLACETEXT_IN,0 GNGDefaultBA dc.w 348,78,72,13 dc.l DefaultTxt,StdAttr dc.w 254 dc.l PLACETEXT_IN,0 GNGDefaultBB dc.w 500,78,72,13 dc.l DefaultTxt,StdAttr dc.w 255 dc.l PLACETEXT_IN,0 GNGStartPotgo dc.w 318,106,134,15 dc.l SPotgoTxt,StdAttr dc.w 65 dc.l PLACETEXT_IN,0 dc.w 0 dt DefaultTxt, dt SPotgoTxt, include "PortDiagWin.asm" ScrLock equ NewMyWindow+nw_Screen BorList dc.w AABorder-*-2 dc.w ABBorder-*-2 dc.w BABorder-*-2 dc.w BBBorder-*-2 dc.w G1Border-*-2 dc.w G1Border1-*-2 dc.w G1Border2-*-2 dc.w G1Border3-*-2 dc.w G1Border4-*-2 dc.w G2Border-*-2 dc.w G2Border1-*-2 dc.w G2Border2-*-2 dc.w G2Border3-*-2 dc.w G2Border4-*-2 dc.w PotgoBorder-*-2 dc.w SerialBorder-*-2 dc.w AllocBorder-*-2 dc.w 0 dt <$VER: PortDiag 1.0 (4.10.95)> tags template dv.l Arg_Force exitrout Cleanup finish end