home *** CD-ROM | disk | FTP | other *** search
- StartModule DC.L (EndModule-StartModule)/4
- EntryPoint EQU *
- #
- # // "Include files containing useful constants"
- #
- # GET "LIBHDR"
- # GET "IOHDR"
- # GET "MANHDR"
- # GET "EXECHDR"
- #
- # // This is a handler for the port tasks
- #
- # // When the task is creates, the parameter packet contains
- # // parm.pkt!pkt.arg1 = BPTR to BCPL string of device name, i.e. ("SKEL:")
- # // parm.pkt!pkt.arg2 = extra info (if needed)
- # // parm.pkt!pkt.arg3 = BPTR to device info node
- #
- # MANIFEST
- # $(
- # IO.blocksize = 30 // size of devices IO block
- # $)
- #
- # LET start(parm.pkt) BE
- # $(
- 310044: MOVE.L D1,D2
- # LET extrainfo = parm.pkt!pkt.arg2
- 310046: LSL.L #2,D2
- 310048: MOVE.L 18(A0,D2.L),4(A1)
- # LET read.pkt = 0
- 31004E: CLR.L 8(A1)
- # LET write.pkt = 0
- 310052: CLR.L C(A1)
- #
- # LET openstring = parm.pkt!pkt.arg1
- 310056: MOVE.L 14(A0,D2.L),10(A1)
- #
- # LET inpkt = VEC pkt.res1
- 31005C: MOVE.L #18,D3
- 31005E: ADD.L A1,D3
- 310060: LSR.L #2,D3
- 310062: MOVE.L D3,14(A1)
- # LET outpkt = VEC pkt.res1
- 310066: MOVE.L #2C,D4
- 310068: ADD.L A1,D4
- 31006A: LSR.L #2,D4
- 31006C: MOVE.L D4,28(A1)
- # LET IOB = VEC IO.blocksize
- 310070: MOVE.L #40,D5
- 310072: ADD.L A1,D5
- 310074: LSR.L #2,D5
- 310076: MOVE.L D5,3C(A1)
- # LET IOIBO = VEC IO.blocksize
- 31007A: MOVE.L #C0,D6
- 310080: ADD.L A1,D6
- 310082: LSR.L #2,D6
- 310084: MOVE.L D6,BC(A1)
-
- # LET error = FALSE
- 310088: CLR.L 13C(A1)
- #
- # TEST extrainfo = 0 THEN // is it a open on SER:
- 31008C: TST.L 4(A1)
- 310090: BNE 3100A0
- # LET devname = "serial.device*X00"
- 310094: LEA 464(A4),A3
- 310098: MOVE.L A3,D1
- 31009A: LSR.L #2,D1
- # ELSE
- 31009C: BRA 3100BE
- # TEST extrainfo = 1 THEN // is it an open on PAR:
- 3100A0: MOVE.L #1,D1
- 3100A2: CMP.L 4(A1),D1
- 3100A6: BNE 3100B6
- # LET devname = "parallel.device*X00"
- 3100AA: LEA 474(A4),A3
- 3100AE: MOVE.L A3,D1
- 3100B0: LSR.L #2,D1
- # ELSE
- 3100B2: BRA 3100BE
- # LET devname = "printer.device*X00"
- 3100B6: LEA 488(A4),A3
- 3100BA: MOVE.L A3,D1
- 3100BC: LSR.L #2,D1
- #
- 3100BE: MOVE.L D1,140(A1)
- #
- # LET ?? = TRUE
- 3100C2: MOVE.L #FFFFFFFF,D2
- 3100C4: MOVE.L D2,144(A1)
- #
- #
- 3100C8: LEA 498(A4),A3
- 3100CC: MOVE.L A3,D3
- 3100CE: LSR.L #2,D3
- 3100D0: MOVE.L D3,148(A1)
- #
- # LET ?? = 0
- 3100D4: CLR.L 14C(A1)
- #
- # LET ?? = 0
- 3100D8: CLR.L 150(A1)
- #
- # LET ?? = node = parm.pkt!pkt.arg3
- 3100DC: MOVE.L (A1),D4
- 3100DE: LSL.L #2,D4
- 3100E0: MOVE.L 1C(A0,D4.L),154(A1)
- #
- # FOR i=0 to IO.blocksize DO IOB!i := 0
- 3100E6: CLR.L 158(A1)
- 3100EA: MOVE.L #1E,D5
- 3100EC: MOVE.L D5,15C(A1)
- 3100F0: BRA 310106
- 3100F4: MOVE.L 3C(A1),D1
- 3100F8: ADD.L 158(A1),D1
- 3100FC: LSL.L #2,D1
- 3100FE: CLR.L 0(A0,D1.L)
- 310102: ADD.L #1,158(A1)
- 310106: MOVE.L 15C(A1),D1
- 31010A: CMP.L 158(A1),D1
- 31010E: BGE 3100F4
-
- # IF OpenDevice( IOB, devname, 0, 0) = 0
- 310110: MOVE.L #0,D4
- 310112: MOVE.L D4,D3
- 310114: MOVE.L 140(A1),D2
- 310118: MOVE.L 3C(A1),D1
- 31011C: MOVE.L #164,D0
- 310122: MOVE.L 7C(A2),A4
- 310126: JSR (A5)
- 310128: TST.L D1
- 31012A: BNE 310134
- # error := TRUE
- 31012E: MOVE.L #FFFFFFFF,D1
- 310130: MOVE.L D1,13C(A1)
- #
- # IF error THEN
- 310134: TST.L 13C(A1)
- 310138: BEQ 310154
- # $( returnpkt(parm.pkt, FALSE, error, objectinuse)
- 31013C: MOVE.L #CA,D3
- 310142: MOVE.L #0,D2
- 310144: MOVE.L (A1),D1
- 310146: MOVE.L #164,D0
- 31014C: MOVE.L C4(A2),A4
- 310150: JSR (A5)
- # return
- 310152: JMP (A6)
- # $)
- #
- # // Copy all the necessary info to the Output buffer too.
- #
- # FOR i=0 TO IO.blocksize DO IOBO!i := IOB!
- 310154: CLR.L 158(A1)
- 310158: MOVE.L #1E,D1
- 31015A: MOVE.L D1,15C(A1)
- 31015E: BRA 310180
- 310162: MOVE.L 3C(A1),D1
- 310166: ADD.L 158(A1),D1
- 31016A: LSL.L #2,D1
- 31016C: MOVE.L BC(A1),D2
- 310170: ADD.L 158(A1),D2
- 310174: LSL.L #2,D2
- 310176: MOVE.L 0(A0,D1.L),0(A0,D2.L)
- 31017C: ADD.L #1,158(A1)
- 310180: MOVE.L 15C(A1),D1
- 310184: CMP.L 158(A1),D1
- 310188: BGE 310162
- #
- # TEST extrainfo = 2 && // did they ask for the printer
- 31018A: MOVE.L #2,D2
- 31018C: CMP.L 4(A1),D2
- 310190: BNE 3101F8
- # LEN(openstring < 4) THEN // with a name longer than PRT:?
- 310194: MOVE.L 10(A1),D3
- 310198: LSL.L #2,D3
- 31019A: MOVE.L #0,D4
- 31019C: MOVE.B 0(A0,D3.L),D4
- 3101A0: MOVE.L #4,D5
- 3101A2: CMP.L D5,D4
- 3101A4: BLE 3101F8
- # $(
- 3101A8: MOVE.L 148(A1),D4
- 3101AC: LSL.L #2,D4
- 3101AE: MOVE.L #0,D6
- 3101B0: MOVE.B 0(A0,D4.L),D6
- 3101B4: MOVE.L D6,D4
- 3101B6: MOVE.L 16C(A1),D3
- 3101BA: MOVE.L #3,D2
- 3101BC: MOVE.L BC(A1),D1
- 3101C0: MOVE.L #164,D0
- 3101C6: MOVE.L 18(A2),A4
- 3101CA: JSR (A5)
- 3101CC: MOVE.L 148(A1),D1
- 3101D0: LSL.L #2,D1
- 3101D2: ADD.L #1,D1
- 3101D4: MOVE.L D1,D3
- 3101D6: MOVE.L #28,D2
- 3101D8: MOVE.L BC(A1),D1
- 3101DC: MOVE.L #164,D0
- 3101E2: MOVE.L 1BC(A2),A4
- 3101E6: JSR (A5)
- 3101E8: MOVE.L BC(A1),D1
- 3101EC: MOVE.L #164,D0
- 3101F2: MOVE.L 54(A2),A4
- 3101F6: JSR (A5)
- # $)
- #
- # outpkt!pkt.type := act.write
- 3101F8: MOVE.L 28(A1),D1
- 3101FC: LSL.L #2,D1
- 3101FE: MOVE.L #3EA,8(A0,D1.L)
- # inpkt!pkt.type := act.read
- 310206: MOVE.L 14(A1),D1
- 31020A: LSL.L #2,D1
- 31020C: MOVE.L #3E9,8(A0,D1.L)
- # node!dev.task := taskid()
- 310214: MOVE.L #164,D0
- 31021A: MOVE.L 38(A2),A4 ;tadkid()
- 31021E: JSR (A5)
- 310220: MOVE.L 154(A1),D2
- 310224: LSL.L #2,D2
- 310226: MOVE.L D1,8(A0,D2.L)
- #
- # // Finished with parameter packer...send back...
- #
- # returnpkt( park.pkt, TRUE )
- 31022A: MOVE.L #FFFFFFFF,D2
- 31022C: MOVE.L (A1),D1
- 31022E: MOVE.L #164,D0
- 310234: MOVE.L C4(A2),A4
- 310238: JSR (A5)
- #
- # // This is the main repeat loop waiting for an event
- #
- # $( LET p = taskwait()
- 31023A: MOVE.L #164,D0
- 310240: MOVE.L A4(A2),A4
- 310244: JSR (A5)
- 310246: MOVE.L D1,158(A1)
- #
- # SWITCHON p!pkt.type INTO
- 31024A: BRA 310426
- # CASE ????:
- 31024E: MOVE.L 158(A1),D1
- 310252: LSL.L #2,D1
- 310254: MOVE.L 14(A0,D1.L),15C(A1)
- 31025A: TST.L 14C(A1)
- 31025E: BEQ 31027E
- 310262: MOVE.L #CA,D3
- 310268: MOVE.L #0,D2
- 31026A: MOVE.L 158(A1),D1
- 31026E: MOVE.L #16C,D0
- 310274: MOVE.L C4(A2),A4
- 310278: JSR (A5)
- 31027A: BRA 310474
- #
- # CASE ????:
- 31027E: MOVE.L #FFFFFFFF,D1
- 310280: MOVE.L D1,14C(A1)
- 310284: MOVE.L 15C(A1),D2
- 310288: LSL.L #2,D2
- 31028A: MOVE.L D1,4(A0,D2.L)
- 31028E: MOVE.L 15C(A1),D2
- 310292: LSL.L #2,D2
- 310294: MOVE.L #3ED,24(A0,D2.L)
- 31029C: MOVE.L D1,D2
- 31029E: MOVE.L 158(A1),D1
- 3102A2: MOVE.L #16C,D0
- 3102A8: MOVE.L C4(A2),A4
- 3102AC: JSR (A5)
- 3102AE: BRA 310474
- #
- # CASE ????:
- 3102B2: MOVE.L 158(A1),D1
- 3102B6: LSL.L #2,D1
- 3102B8: MOVE.L 14(A0,D1.L),15C(A1)
- 3102BE: TST.L 150(A1)
- 3102C2: BEQ 3102E2
- 3102C6: MOVE.L #CA,D3
- 3102CC: MOVE.L #0,D2
- 3102CE: MOVE.L 158(A1),D1
- 3102D2: MOVE.L #16C,D0
- 3102D8: MOVE.L C4(A2),A4
- 3102DC: JSR (A5)
- 3102DE: BRA 310474
- #
- # CASE ????:
- 3102E2: MOVE.L #FFFFFFFF,D1
- 3102E4: MOVE.L D1,150(A1)
- 3102E8: MOVE.L 15C(A1),D2
- 3102EC: LSL.L #2,D2
- 3102EE: MOVE.L D1,4(A0,D2.L)
- 3102F2: MOVE.L 15C(A1),D2
- 3102F6: LSL.L #2,D2
- 3102F8: MOVE.L #3EE,24(A0,D2.L)
- 310300: MOVE.L D1,D2
- 310302: MOVE.L 158(A1),D1
- 310306: MOVE.L #16C,D0
- 31030C: MOVE.L C4(A2),A4
- 310310: JSR (A5)
- 310312: BRA 310474
- #
- # CASE ????:
- 310316: MOVE.L 158(A1),D1
- 31031A: LSL.L #2,D1
- 31031C: CMP.L #3ED,14(A0,D1.L)
- 310324: BNE 310330
- 310328: CLR.L 14C(A1)
- 31032C: BRA 310334
- 310330: CLR.L 150(A1)
- 310334: TST.L 14C(A1)
- 310338: BNE 31034E
- 31033C: TST.L 150(A1)
- 310340: BNE 31034E
- 310344: MOVE.L 154(A1),D1
- 310348: LSL.L #2,D1
- 31034A: CLR.L 8(A0,D1.L)
- 31034E: MOVE.L #FFFFFFFF,D2
- 310350: MOVE.L 158(A1),D1
- 310354: MOVE.L #168,D0
- 31035A: MOVE.L C4(A2),A4
- 31035E: JSR (A5)
- 310360: BRA 310474
- #
- # CASE ????:
- 310364: MOVE.L 158(A1),14(A1)
- 31036A: MOVE.L 8(A1),D2
- 31036E: MOVE.L 3C(A1),D1
- 310372: MOVE.L #168,D0
- 310378: LEA 4E4(A4),A4
- 31037C: JSR (A5)
- 31037E: BRA 310474
- #
- # CASE ????:
- 310382: MOVE.L 158(A1),28(A1)
- 310388: MOVE.L C(A1),D2
- 31038C: MOVE.L BC(A1),D1
- 310390: MOVE.L #168,D0
- 310396: LEA 4E4(A4),A4
- 31039A: JSR (A5)
- 31039C: BRA 310474
- #
- # CASE ????:
- 3103A0: MOVE.L 158(A1),8(A1)
- 3103A6: MOVE.L 14(A1),D4
- 3103AA: MOVE.L 158(A1),D3
- 3103AE: MOVE.L #2,D2
- 3103B0: MOVE.L 3C(A1),D1
- 3103B4: MOVE.L #168,D0
- 3103BA: LEA 4A0(A4),A4
- 3103BE: JSR (A5)
- 3103C0: CLR.L 14(A1)
- 3103C4: BRA 310474
- #
- # CASE ????:
- 3103C8: MOVE.L 158(A1),C(A1)
- 3103CE: MOVE.L 28(A1),D4
- 3103D2: MOVE.L 158(A1),D3
- 3103D6: MOVE.L #3,D2
- 3103D8: MOVE.L BC(A1),D1
- 3103DC: MOVE.L #168,D0
- 3103E2: LEA 4A0(A4),A4
- 3103E6: JSR (A5)
- 3103E8: CLR.L 28(A1)
- 3103EC: BRA 310474
- #
- # DEFAULT:
- 3103F0: TST.L 14C(A1)
- 3103F4: BNE 31040A
- 3103F8: TST.L 150(A1)
- 3103FC: BNE 31040A
- 310400: MOVE.L 154(A1),D1
- 310404: LSL.L #2,D1
- 310406: CLR.L 8(A0,D1.L)
- 31040A: MOVE.L #D1,D3
- 310410: MOVE.L #0,D2
- 310412: MOVE.L 158(A1),D1
- 310416: MOVE.L #168,D0
- 31041C: MOVE.L C4(A2),A4
- 310420: JSR (A5)
- 310422: BRA 310474
- #
- # // SWITCHON p!pkt.type INTO
- 310426: MOVE.L 158(A1),D1
- 31042A: LSL.L #2,D1
- 31042C: MOVE.L 8(A0,D1.L),D1
-
- 310430: MOVE.L #52,D2
- 310432: CMP.L D2,D1
- 310434: BEQ 3103A0
-
- 310438: MOVE.L #57,D3
- 31043A: CMP.L D3,D1
- 31043C: BEQ 3103C8
-
- 31043E: CMP.L #3E9,D1
- 310444: BEQ 310364
-
- 310448: CMP.L #3EA,D1
- 31044E: BEQ 310382
-
- 310452: CMP.L #3ED,D1
- 310458: BEQ 31024E
-
- 31045C: CMP.L #3EE,D1
- 310462: BEQ 3102B2
-
- 310466: CMP.L #3EF,D1
- 31046C: BEQ 310316
- 310470: BRA 3103F0
-
- # $) REPEATWHILE open |
- 310474: TST.L 14C(A1)
- 310478: BNE 31023A
- # ??? = 0
- 31047C: TST.L 150(A1)
- 310480: BNE 31023A
- # outpkt = 0 |
- 310484: TST.L 28(A1)
- 310488: BEQ 31023A
- # inpkt = 0
- 31048C: TST.L 14(A1)
- 310490: BEQ 31023A
- #
- # // Termination
- #
- # CloseDevice( IOB )
- 310494: MOVE.L 3C(A1),D1
- 310498: MOVE.L #164,D0
- 31049E: MOVE.L 80(A2),A4
- 3104A2: JSR (A5)
- 3104A4: JMP (A6)
- #
- # $)
- 3104A6: NOP
- CNOP 0,4
- 3104A8: DC.B 14, 'serial.device',0
- CNOP 0,4
- 3104B8: DC.B 16, 'parallel.device',0
- CNOP 0,4
- 3104C8: DC.B 15, 'printer.device',0
-
- 3104DC: ADD.B #[2,(A3)+
- #
- # // Handle an IO request. Passed command, transmission packet (tp)
- # // and request packet (rp). rp contains buffer and length in arg2/3
- # AND handle.request(IOB, command, rp, tp ) BE
- # $(
- # LET buff = rp!pkt.arg2
- 3104E0: MOVE.W 0(A4),A0
- 3104E4: MOVE.L D3,D5
- 3104E6: LSL.L #2,D5
- 3104E8: MOVE.L 18(A0,D5.L),10(A1)
- # LET len = rp!pkt.arg3
- 3104EE: MOVE.L 1C(A0,D5.L),14(A1)
- 3104F4: CLR.L 34(A1)
- # SetIO( IOB, IO.data, buff )
- 3104F8: MOVE.L 1C(A0,D5.L),D4
- 3104FC: MOVE.L 2C(A1),D3
- 310500: MOVE.L #$,D0
- 310502: MOVE.L 18(A2),A4
- 310506: JSR (A5)
- # putlong( IOB, IO.data, buff )
- 310508: MOVE.L 10(A1),D3
- 31050C: MOVE.L #(,D2
- 31050E: MOVE.L (A1),D1
- 310510: MOVE.L #$,D0
- 310512: MOVE.L 1BC(A2),A4
- 310516: JSR (A5)
- # SendIO(IOB, tp)
- 310518: MOVE.L C(A1),D2
- 31051C: MOVE.L (A1),D1
- 31051E: MOVE.L #$,D0
- 310520: MOVE.L 58(A2),A4
- 310524: JSR (A5)
- # $)
- 310526: JMP (A6)
- #
- # // Handle a returning IO request. The user request packet is
- # // passed as p, and must be returned with success/failure message.
- # AND handle.return(IOB, p ) BE
- # $(
- # LET errcode = IOB O.error
- 310528: MOVE.L D1,D3
- 31052A: LSL.L #@,D3
- 31052C: MOVE.L #@,D4
- 31052E: MOVE.B 1F(A0,D3.L),D4
- 310532: MOVE.L D4,8(A1)
- # LET len = getlong( IOB, IO.actual )
- 310536: MOVE.L # ,D2
- 310538: MOVE.L #@,D0
- 31053A: MOVE.L 1B8(A2),A4
- 31053E: JSR (A5)
- #
- # TEST errcode = 0 THEN // no error
- 310540: MOVE.L D1,C(A1)
- 310544: TST.L 8(A1)
- 310548: BNE 31055E
- # returnpkt(p, len )
- 31054C: MOVE.L D1,D2
- 31054E: MOVE.L 4(A1),D1
- 310552: MOVE.L #@,D0
- 310554: MOVE.L C4(A2),A4
- 310558: JSR (A5)
- # ELSE
- 31055A: BRA 310570
- # returnpkt(p, -1, errcode )
- 31055E: MOVE.L 8(A1),D3
- 310562: MOVE.L #@@@@,D2
- 310564: MOVE.L 4(A1),D1
- 310568: MOVE.L #@,D0
- 31056A: MOVE.L C4(A2),A4
- 31056E: JSR (A5)
- 310570: JMP (A6)
- # $)
- #
- 310572: NOP
- 310574: CNOP 0,4
- DC.L 0
- DC.L 1
- DC.L Entry-Module
- DC.L $6f 111
- ModEnd EQU *
-
-
-
-
-
-
-
-
-