1 ;###############################################
2 ;### SPECIAL WARNING FOR NORMAL PROGRAMMERS: ###
3 ;###############################################
4 ;###### Please don't read this source !!! ######
5 ;##### It is completely ALTERNATIVELY made #####
6 ;### from scratch. Reading such thing may and ##
7 ;### possibly WILL leave permanent damage to ###
8 ;################ your _mind_. #################
9 ;##### Special recommendation for Lemming. #####
10 ;###############################################
16 WARN_DDR_MASK equ $FFF800FF
17 WARN_PR_MASK equ $00000001
54 addq.b #1,TDNestCnt(a6)
60 move.l MP_SIGTASK(a1),a1
65 dtl <Already running>,a0
68 NoPortFound lea RzPort(pc),a1
69 move.l ThisTask(a6),MP_SIGTASK(a1)
77 dtl <disk.resource>,a1
78 call exec,OpenResource
81 dtl <misc.resource>,a1
86 call intuition,LockPubScreen
89 OpenWinFail dtl <Cannot open window>,a0
90 SSExitError jump ss,ExitError
92 LockScrOK move.l d0,a0
94 call gadtools,GetVisualInfoA
108 tst.b gng_GadgetID+1(a1)
111 GGNG_Skip lea gng_VisualInfo(a3),a3
113 moveq #BUTTON_KIND,d0
121 lea NewMyWindow(pc),a0
122 ;;; move.w #CUSTOMSCREEN,nw_Type(a0)
124 dt ScrTitle,<PortDiag - Copyright (c) 1995 Short Software ',60,'short@k332.feld.cvut.cz',62,'>
130 move.w NewMyWindow+nw_Width(pc),d0
133 move.w NewMyWindow+nw_Height(pc),d0
137 call intuition,OpenWindowTagList
141 put.l pr_WindowPtr(a0),OrigWPtr
142 move.l d0,pr_WindowPtr(a0)
145 move.l wd_UserPort(a0),d6
146 move.l wd_RPort(a0),d2
148 call gadtools,GT_RefreshWindow
151 get.l intuitionbase,a6
152 NextBorder lea (a2,d0.w),a1
163 lea MyWinITexts(pc),a1
166 call intuition,PrintIText
167 dtl <potgo.resource>,a1
168 call exec,OpenResource
171 get.l intuitionbase,a6
177 move.l CIABaseA4Ptr(pc),a4
178 move.b ciaa+ciaddra-CIABaseA4(a4),d0
180 move.b ciaa+ciaddrb-CIABaseA4(a4),d0
182 move.b ciab+ciaddra-CIABaseA4(a4),d0
184 move.b ciab+ciaddrb-CIABaseA4(a4),d0
190 call exec,AddIntServer
191 LoopIDCMP lea SetSelected(pc),a1
194 move.l wd_RPort(a2),d3
201 move.l joy0dat(a4),d2
205 lea G12l+gg_GadgetID(pc),a2
206 lea G12r+gg_GadgetID(pc),a3
207 bsr ProcCounterLR ;joy0daty
210 lea G11l+gg_GadgetID(pc),a2
211 lea G11r+gg_GadgetID(pc),a3
212 bsr ProcCounterLR ;joy0datx
215 lea G22l+gg_GadgetID(pc),a2
216 lea G22r+gg_GadgetID(pc),a3
217 bsr ProcCounterLR ;joy1daty
220 lea G21l+gg_GadgetID(pc),a2
221 lea G21r+gg_GadgetID(pc),a3
222 bsr ProcCounterLR ;joy1datx
223 move.l pot0dat(a4),d2
226 bsr.s ProcCounter ;pot0daty
229 bsr.s ProcCounter ;pot0datx
232 bsr.s ProcCounter ;pot1daty
235 bsr.s ProcCounter ;pot1datx
240 move.b MP_SIGBIT(a0),d1
242 or.w #SIGBREAKF_CTRL_C!SIGBREAKF_CTRL_E,d0
244 btst #SIGBREAKB_CTRL_C,d0
246 SSReportBreak moveq #err_break,d0
247 SSReportError jump ss,ReportError
250 PC_Return tstv.b InitCounters
255 ProcCounter rol.l #8,d2
284 ActivateScreen move.l ScrLock(pc),a0
287 TestFlagE btst #SIGBREAKB_CTRL_E,d0
290 call intuition,ActivateWindow
294 RetryIDCMP move.l d6,a0
295 call gadtools,GT_GetIMsg
299 movem.l im_Class(a1),d2/d3/a3
301 btst #9,d2 ;bit(IDCMP_CLOSEWINDOW)
304 move.l CIABaseA4Ptr(pc),a4
305 btst #6,d2 ;bit(IDCMP_GADGETUP)
307 move.b gg_GadgetID+1(a3),d0
310 move.b DefCIAIO(v,d0.w),d1
312 add.w CIAddrTab(pc,d0.w),a4
318 CIAprTab dc.w ciaa+ciapra-CIABaseA4
319 dc.w ciaa+ciaprb-CIABaseA4
320 dc.w ciab+ciapra-CIABaseA4
321 dc.w ciab+ciaprb-CIABaseA4
322 CIAddrTab dc.w ciaa+ciaddra-CIABaseA4
323 dc.w ciaa+ciaddrb-CIABaseA4
324 dc.w ciab+ciaddra-CIABaseA4
325 dc.w ciab+ciaddrb-CIABaseA4
328 NoGadUp btst #5,d2 ;bit(IDCMP_GADGETDOWN)
330 move.b gg_GadgetID+1(a3),d0
334 bcc.s OtherButtonDown
338 lea Warn_DDR_Mask(pc),a0
342 move.w CIAEndTab(pc,d0.w),d2
345 CallScrBeep bsr.s DoScrBeep
348 DoScrBeep move.l ScrLock(pc),a0 ;(#66)
349 jump intuition,DisplayBeep
351 ItsddrChange tstv.l Arg_Force
357 dtl.lc <WARNING: You are attempting to change a bit>,a0
358 dt.lc <which may cause permanent hardware damage or>
359 dt.lc <unconditional immediate system crash!>
361 dt.lc <This is not a common warning as in many other programs:>
362 dt.lc <THIS REALLY _MIGHT_ DESTROY YOUR MACHINE!!!>
364 dt.lc <And remember: The author is not responsible for>
365 dt.l <any damage caused by this (any ;-) ) software!>
366 dtl <Change it|Oh no, forget it!>,a2
367 call ss,SimpleRequest
373 NoWarnBit add.w CIAddrTab(pc,d0.w),a4
377 Warn_DDR_Mask dc.l WARN_DDR_MASK,WARN_PR_MASK
379 OtherButtonDown bne.s NoWritePotgo
380 ;+++ Pressed "Start potgo" +++ (#65)
383 call potgo,WritePotgo
386 NoWritePotgo sub.b #66,d0
390 move.b adkconr+BaseA4,d0
392 and.b #ADKF_UARTBRK>>8,d0
393 bchg #ADKB_UARTBRK-8,d0
395 bset #ADKB_UARTBRK-8,d0
397 move.b d0,adkcon+BaseA4
404 moveq #0,d1 ;(#68)..(#75)
414 NoPotgoBits subq.b #8,d0
416 moveq #MR_SERIALPORT,d2
417 lea ASerial+gg_GadgetID(pc),a2
419 DoAParallel move.l a2,d7
422 CopySerParName move.b (a3)+,(a0)+
426 dtl <l port grab error, owned by >,a1
427 CopySerParSuff move.b (a1)+,(a0)+
439 CopySerParSucc move.b (a0)+,(a4)+
444 ClearScrTit get.l MyWindow,a0
448 jump intuition,SetWindowTitles
450 DoFreeSerPar bsr.s FreeSerParRout
455 SerParHalf move.l d2,d0
458 addq.b #1,TDNestCnt(a0)
459 call misc,AllocMiscResource
464 CopyLimName move.b (a0)+,(a3)+
473 DontFreeRest addq #4,sp
475 DoScrWinTitle geta ScrTitBuf,a2
478 FreeSerParRout move.l d2,d0
482 JumpMiscFree jump misc,FreeMiscResource
484 JumpExecPermit jump exec,Permit
486 NoASerial moveq #MR_PARALLELPORT,d2
487 lea AParallel+gg_GadgetID(pc),a2
492 lea ADisk+gg_GadgetID(pc),a2
497 get.l intuitionbase,a6
498 cmp.w #39,LIB_VERSION(a6)
505 push #WA_PointerDelay
507 call SetWindowPointerA
509 StupidGfx2 moveq #-1,d4
511 dtl <Allocating disk...>,a2
515 LoopADiskUnit move.l d2,d0
523 dbra d2,LoopADiskUnit
526 lea pr_MsgPort(a2),a2
527 RetryGetUnit lea DRUnit(pc),a1
529 move.l a0,MN_REPLYPORT(a1)
534 RetryGiveReply move.l a2,a0
545 dtl <Disk control hardware allocated; Units: 0 - %s, 1 - %s, 2 - %s, 3 - %s>,a0
550 get.l intuitionbase,a6
551 cmp.w #39,LIB_VERSION(a6)
558 call SetWindowPointerA
559 lea (1*8+4)+(2*8+4)(sp),sp
560 SetTitnRet get.l MyWindow,a0
565 ADiskDoFree bsr FreeDiskRes
568 dtl.c <Disk completely >,a2
569 dt GivenSys,<given to system.>
570 DoScrTitle get.l intuitionbase,a6
576 lea AGamePort+gg_GadgetID(pc),a2
588 LoopPushRol bsr.s PushRolSw
593 dtl <Game Port 1: A - %s, B - %s; Game Port 2: A - %s, B - %s; Start - %s>,a0
600 PushRolSw rol.w #2,d0
613 AGameFailed bsr DoScrBeep
614 dtl <Game Ports are fully allocated!>,a2
617 ADoFreeGame get.w GameAlloced,d0
622 dtl <Game Ports given to system.>,a2
625 FreeDiskRes call disk,GiveUnit
629 LoopFreeUnit rol.b #1,d3
633 SkipFreeUnit dbra d2,LoopFreeUnit
636 Cleanup move.l 4.w,a6
642 NoPortAdd tstv.b CleanServ
648 NoCleanServ lea ADisk+gg_GadgetID(pc),a2
653 NoFreeDisk lea ASerial+gg_GadgetID(pc),a2
657 moveq #MR_SERIALPORT,d2
659 NoFreeSerial lea AParallel+gg_GadgetID(pc),a2
663 moveq #MR_PARALLELPORT,d2
665 NoFreeParallel get.w GameAlloced,d0
668 call potgo,FreePotBits
669 NoFreeGamePort get.l MyWindow,d0
673 get.l OrigWPtr,pr_WindowPtr(a0)
676 addq.b #1,TDNestCnt(a6)
677 ClearWinPort move.l wd_UserPort(a4),a0
685 WinPortCleared move.l a4,a0
687 call intuition,ModifyIDCMP
690 call intuition,CloseWindow
691 NoMyWindow get.l StdFont,d0
696 NoCloseFont lea AGamePort(pc),a1
699 call gadtools,FreeGadgets
707 jump intuition,UnlockPubScreen
709 GadTable dc.w AA0l+gg_GadgetID-*-2
710 dc.w AA1l+gg_GadgetID-*-2
711 dc.w AA2l+gg_GadgetID-*-2
712 dc.w AA3l+gg_GadgetID-*-2
713 dc.w AA4l+gg_GadgetID-*-2
714 dc.w AA5l+gg_GadgetID-*-2
715 dc.w AA6l+gg_GadgetID-*-2
716 dc.w AA7l+gg_GadgetID-*-2
717 dc.w AB0l+gg_GadgetID-*-2
718 dc.w AB1l+gg_GadgetID-*-2
719 dc.w AB2l+gg_GadgetID-*-2
720 dc.w AB3l+gg_GadgetID-*-2
721 dc.w AB4l+gg_GadgetID-*-2
722 dc.w AB5l+gg_GadgetID-*-2
723 dc.w AB6l+gg_GadgetID-*-2
724 dc.w AB7l+gg_GadgetID-*-2
725 dc.w BA0l+gg_GadgetID-*-2
726 dc.w BA1l+gg_GadgetID-*-2
727 dc.w BA2l+gg_GadgetID-*-2
728 dc.w BA3l+gg_GadgetID-*-2
729 dc.w BA4l+gg_GadgetID-*-2
730 dc.w BA5l+gg_GadgetID-*-2
731 dc.w BA6l+gg_GadgetID-*-2
732 dc.w BA7l+gg_GadgetID-*-2
733 dc.w BB0l+gg_GadgetID-*-2
734 dc.w BB1l+gg_GadgetID-*-2
735 dc.w BB2l+gg_GadgetID-*-2
736 dc.w BB3l+gg_GadgetID-*-2
737 dc.w BB4l+gg_GadgetID-*-2
738 dc.w BB5l+gg_GadgetID-*-2
739 dc.w BB6l+gg_GadgetID-*-2
740 dc.w BB7l+gg_GadgetID-*-2
741 dc.w AA0r+gg_GadgetID-*-2
742 dc.w AA1r+gg_GadgetID-*-2
743 dc.w AA2r+gg_GadgetID-*-2
744 dc.w AA3r+gg_GadgetID-*-2
745 dc.w AA4r+gg_GadgetID-*-2
746 dc.w AA5r+gg_GadgetID-*-2
747 dc.w AA6r+gg_GadgetID-*-2
748 dc.w AA7r+gg_GadgetID-*-2
749 dc.w AB0r+gg_GadgetID-*-2
750 dc.w AB1r+gg_GadgetID-*-2
751 dc.w AB2r+gg_GadgetID-*-2
752 dc.w AB3r+gg_GadgetID-*-2
753 dc.w AB4r+gg_GadgetID-*-2
754 dc.w AB5r+gg_GadgetID-*-2
755 dc.w AB6r+gg_GadgetID-*-2
756 dc.w AB7r+gg_GadgetID-*-2
757 dc.w BA0r+gg_GadgetID-*-2
758 dc.w BA1r+gg_GadgetID-*-2
759 dc.w BA2r+gg_GadgetID-*-2
760 dc.w BA3r+gg_GadgetID-*-2
761 dc.w BA4r+gg_GadgetID-*-2
762 dc.w BA5r+gg_GadgetID-*-2
763 dc.w BA6r+gg_GadgetID-*-2
764 dc.w BA7r+gg_GadgetID-*-2
765 dc.w BB0r+gg_GadgetID-*-2
766 dc.w BB1r+gg_GadgetID-*-2
767 dc.w BB2r+gg_GadgetID-*-2
768 dc.w BB3r+gg_GadgetID-*-2
769 dc.w BB4r+gg_GadgetID-*-2
770 dc.w BB5r+gg_GadgetID-*-2
771 dc.w BB6r+gg_GadgetID-*-2
772 dc.w BB7r+gg_GadgetID-*-2
773 dc.w G13l+gg_GadgetID-*-2
774 dc.w G13r+gg_GadgetID-*-2
775 dc.w G14l+gg_GadgetID-*-2
776 dc.w G14r+gg_GadgetID-*-2
777 dc.w G23l+gg_GadgetID-*-2
778 dc.w G23r+gg_GadgetID-*-2
779 dc.w G24l+gg_GadgetID-*-2
780 dc.w G24r+gg_GadgetID-*-2
781 dc.w S1l+gg_GadgetID-*-2
782 dc.w S2l+gg_GadgetID-*-2
783 dc.w G13m+gg_GadgetID-*-2
784 dc.w G23m+gg_GadgetID-*-2
785 dc.w G14m+gg_GadgetID-*-2
786 dc.w G24m+gg_GadgetID-*-2
788 ProcCounterLR bsr ProcCounter
799 ChkSelected cmp.b (a2),d0
800 Return1ShEq beq.s Return1
801 SetSelected mpush d2/d3/a0/a1/a3
804 move.l wd_RPort(a3),a1
809 move.w -gg_GadgetID+gg_LeftEdge(a2),d0
810 move.w -gg_GadgetID+gg_TopEdge(a2),d1
811 move.l -gg_GadgetID+gg_GadgetRender(a2),a3
819 NoImage moveq #RP_COMPLEMENT,d0
821 move.l wd_RPort(a3),a0
823 cmp.w #39,LIB_VERSION(a6)
825 call SetWriteMask ;failures ignored
826 StupidGfxJump move.l wd_RPort(a3),a1
827 lea -gg_GadgetID+gg_LeftEdge(a2),a0
828 move.w (a0)+,d0 ;LeftEdge->xmin
829 move.w (a0)+,d1 ;TopEdge->ymin
837 Ret_SetSelected mpop d2/d3/a0/a1/a3
840 SS_DoInpOut lea ImgInput(pc),a1
844 SS_HaveImage call intuition,DrawImage
846 bra.s Ret_SetSelected
848 StupidGfx move.b d0,rp_Mask(a0)
851 DoRoutUpdate lea CIABaseA4,a4
856 ChkCIALoop move.w (a3)+,d0
861 move.b $28(a4),d2 ;$28(potgobase)/W=Contents of POTGO/POTINP
871 btst #ADKB_UARTBRK-8,adkconr(a4)
875 btst #11-8,serdatr(a4)
883 Chk8Loop move.w (a0)+,d0
890 Chk8Okay dbra d3,Chk8Loop
893 IntRoutine tst.b Signaled(a1)
900 move.l joy0dat(a4),d0
901 vcmp.l ST_joy0daty,d0
903 move.l pot0dat(a4),d0
904 vcmp.l ST_pot0daty,d0
908 DoSignal get.l SigMask,d0
913 IntReturn mpop d2-d4/d7/a2-a4
914 IntReturnQuick move.l BaseA4Ptr(pc),a0
919 dc.b NT_INTERRUPT,-128
924 IntName dc.b 'PortDiag',0
934 dc.b NT_INTERRUPT,-128
935 dc.l IntName,0,0 ;LN_NAME,IS_DATA,IS_CODE
938 dc.b NT_INTERRUPT,-128
939 dc.l IntName,0,0 ;LN_NAME,IS_DATA,IS_CODE
942 dc.b NT_INTERRUPT,-128
943 dc.l IntName,0,0 ;LN_NAME,IS_DATA,IS_CODE
950 RzPortHead dc.l RzPortTail
951 RzPortTail dc.l 0,RzPortHead
954 dt RzPortName,<PortDiag.rendezvous>
957 GNGDefaultAA dc.w 44,78,72,13
958 dc.l DefaultTxt,StdAttr
962 GNGDefaultAB dc.w 196,78,72,13
963 dc.l DefaultTxt,StdAttr
967 GNGDefaultBA dc.w 348,78,72,13
968 dc.l DefaultTxt,StdAttr
972 GNGDefaultBB dc.w 500,78,72,13
973 dc.l DefaultTxt,StdAttr
977 GNGStartPotgo dc.w 318,106,134,15
978 dc.l SPotgoTxt,StdAttr
984 dt DefaultTxt,<Default>
985 dt SPotgoTxt,<Start potgo>
987 include "PortDiagWin.asm"
989 ScrLock equ NewMyWindow+nw_Screen
991 BorList dc.w AABorder-*-2
1005 dc.w PotgoBorder-*-2
1006 dc.w SerialBorder-*-2
1007 dc.w AllocBorder-*-2
1010 dt <$VER: PortDiag 1.0 (4.10.95)>
1013 template <OMIT_ANY_OF_ALL_THOSE_ANNOYING_WARNING_MESSAGES=FORCE/S>