ATARI Macro Assembler Ver 1.0C Page 1 N: CIO HANDLER D2:NDEV.ASM EQUATES LIST D,G,I 0000 ; N: HANDLER FOR FUJINET ; AUTHOR: THOM CHERRYHOMES ; INCLUDE D2:EQUATES.ASM ; CURRENT IOCB IN ZERO PAGE = 0020 ZIOCB EQU $20 ; ZP IOCB = 0020 ZICHID EQU ZIOCB ; ID = 0021 ZICDNO EQU ZIOCB+1 ; UNIT # = 0022 ZICCOM EQU ZIOCB+2 ; COMMAND = 0023 ZICSTA EQU ZIOCB+3 ; STATUS = 0024 ZICBAL EQU ZIOCB+4 ; BUF ADR LOW = 0025 ZICBAH EQU ZIOCB+5 ; BUF ADR HIGH = 0026 ZICPTL EQU ZIOCB+6 ; PUT ADDR L = 0027 ZICPTH EQU ZIOCB+7 ; PUT ADDR H = 0028 ZICBLL EQU ZIOCB+8 ; BUF LEN LOW = 0029 ZICBLH EQU ZIOCB+9 ; BUF LEN HIGH = 002A ZICAX1 EQU ZIOCB+10 ; AUX 1 = 002B ZICAX2 EQU ZIOCB+11 ; AUX 2 = 002C ZICAX3 EQU ZIOCB+12 ; AUX 3 = 002D ZICAX4 EQU ZIOCB+13 ; AUX 4 = 002E ZICAX5 EQU ZIOCB+14 ; AUX 5 = 002F ZICAX6 EQU ZIOCB+15 ; AUX 6 = 000C DOSINI EQU $0C ; DOSINI ; INTERRUPT VECTORS ; AND OTHER PAGE 2 VARS = 0202 VPRCED EQU $0202 ; PROCEED VCTR = 02C6 COLOR2 EQU $02C6 ; MODEF BKG C = 02E7 MEMLO EQU $02E7 ; MEM LO = 02EA DVSTAT EQU $02EA ; 4 BYTE STATS ; PAGE 3 ; DEVICE CONTROL BLOCK (DCB) = 0300 DCB EQU $0300 ; BASE = 0300 DDEVIC EQU DCB ; DEVICE # = 0301 DUNIT EQU DCB+1 ; UNIT # = 0302 DCOMND EQU DCB+2 ; COMMAND = 0303 DSTATS EQU DCB+3 ; STATUS/DIR = 0304 DBUFL EQU DCB+4 ; BUF ADR L = 0305 DBUFH EQU DCB+5 ; BUF ADR H = 0306 DTIMLO EQU DCB+6 ; TIMEOUT (S) = 0307 DRSVD EQU DCB+7 ; NOT USED = 0308 DBYTL EQU DCB+8 ; BUF LEN L = 0309 DBYTH EQU DCB+9 ; BUF LEN H = 030A DAUXL EQU DCB+10 ; AUX BYTE L = 030B DAUXH EQU DCB+11 ; AUX BYTE H = 031A HATABS EQU $031A ; HANDLER TBL ATARI Macro Assembler Ver 1.0C Page 2 N: CIO HANDLER D2:EQUATES.ASM EQUATES ; IOCB'S * 8 = 0340 IOCB EQU $0340 ; IOCB BASE = 0340 ICHID EQU IOCB ; ID = 0341 ICDNO EQU IOCB+1 ; UNIT # = 0342 ICCOM EQU IOCB+2 ; COMMAND = 0343 ICSTA EQU IOCB+3 ; STATUS = 0344 ICBAL EQU IOCB+4 ; BUF ADR LOW = 0345 ICBAH EQU IOCB+5 ; BUF ADR HIGH = 0346 ICPTL EQU IOCB+6 ; PUT ADDR L = 0347 ICPTH EQU IOCB+7 ; PUT ADDR H = 0348 ICBLL EQU IOCB+8 ; BUF LEN LOW = 0349 ICBLH EQU IOCB+9 ; BUF LEN HIGH = 034A ICAX1 EQU IOCB+10 ; AUX 1 = 034B ICAX2 EQU IOCB+11 ; AUX 2 = 034C ICAX3 EQU IOCB+12 ; AUX 3 = 034D ICAX4 EQU IOCB+13 ; AUX 4 = 034E ICAX5 EQU IOCB+14 ; AUX 5 = 034F ICAX6 EQU IOCB+15 ; AUX 6 ; HARDWARE REGISTERS = D302 PACTL EQU $D302 ; PIA CTRL A ; OS ROM VECTORS = E456 CIOV EQU $E456 ; CIO ENTRY = E459 SIOV EQU $E459 ; SIO ENTRY ; CONSTANTS = 0009 PUTREC EQU $09 ; CIO PUTREC = 0071 DEVIDN EQU $71 ; SIO DEVID = 0040 DSREAD EQU $40 ; FUJI->ATARI = 0080 DSWRIT EQU $80 ; ATARI->FUJI = 0004 MAXDEV EQU 4 ; # OF N: DEVS = 0088 EOF EQU $88 ; ERROR 136 = 009B EOL EQU $9B ; EOL CHAR INCLUDE D2:RELOC.MAC ATARI Macro Assembler Ver 1.0C Page 3 N: CIO HANDLER D2:RELOC.MAC RELOCATION MACROS 0000 ; OPCODES = 002C RBIT EQU $2C = 0020 RJSR EQU $20 = 00BD RLDAX EQU $BD = 009D RSTAX EQU $9D = 00EC RCPX EQU $EC = 00AD RLDA EQU $AD = 008E RSTX EQU $8E = 004C RJMP EQU $4C = 008D RSTA EQU $8D = 00B9 RLDAY EQU $B9 = 0099 RSTAY EQU $99 = 00FE RINCX EQU $FE = 00DD RCMPX EQU $DD = 007D RADCX EQU $7D = 00BC RLDYX EQU $BC = 00EE RINC EQU $EE = 008C RSTY EQU $8C = 001D RORAX EQU $1D = 00AC RLDY EQU $AC = 006C RJMPI EQU $6C = 00AE RLDX EQU $AE = 00CE RDEC EQU $CE = 003D RANDX EQU $3D = 00FD RSBCX EQU $FD REL MACRO OP,VARNUM DB %1 DB %2 DB *-Q+1 Q SET * ENDM INCLUDE D2:INIT.ASM ATARI Macro Assembler Ver 1.0C Page 4 N: CIO HANDLER D2:INIT.ASM HANDLER START 0000 0000 = 2300 ORG $2300 2300 START 2300 A50C LDA DOSINI 2302 8DD426 STA DSAV 2305 8D1923 STA RESET+1 2308 A50D LDA DOSINI+1 230A 8DD526 STA DSAV+1 230D 8D1A23 STA RESET+2 2310 A918 LDA #LOW RESET 2312 850C STA DOSINI 2314 A923 LDA #HIGH RESET 2316 850D STA DOSINI+1 2318 RESET 2318 20FFFF JSR $FFFF ; PATCH. 231B 202923 JSR IHTBS 231E A900 LDA #LOW PGEND 2320 8DE702 STA MEMLO 2323 A92F LDA #HIGH PGEND 2325 8DE802 STA MEMLO+1 2328 60 RTS ; INSERT INTO HATABS 2329 IHTBS PROC ; FIND FIRST EMPTY ENTRY, OR ; ALREADY EXTANT N: ENTRY. 2329 A000 LDY #$00 232B B91A03 :1 LDA HATABS,Y 232E F00B ^233B BEQ HFND 2330 C94E CMP #'N' 2332 F007 ^233B BEQ HFND 2334 C8 INY 2335 C8 INY 2336 C8 INY 2337 C021 CPY #11*3 2339 90F0 ^232B BCC :1 ; EITHER FOUND EMPTY SPOT, ; OR FOUND EXTANT N: ENTRY. 233B A94E HFND LDA #'N' 233D 991A03 STA HATABS,Y 2340 A9AA LDA #LOW CIOHND 2342 991B03 STA HATABS+1,Y 2345 A926 LDA #HIGH CIOHND 2347 991C03 STA HATABS+2,Y EPROC ; MOVE MEMLO 234A PROC ATARI Macro Assembler Ver 1.0C Page 5 N: CIO HANDLER D2:INIT.ASM HANDLER START 234A A900 LDA #LOW PGEND 234C 8DE702 STA MEMLO 234F A92F LDA #HIGH PGEND 2351 8DE802 STA MEMLO+1 EPROC ATARI Macro Assembler Ver 1.0C Page 6 N: CIO HANDLER D2:INIT.ASM SHOW FUJINET BANNER 2354 ; QUERY FUJINET ; JSR STPOLL ; OUTPUT READY OR ERROR 2354 OBANR PROC 2354 A200 LDX #$00 ; IOCB #0 E: 2356 A909 LDA #PUTREC 2358 9D4203 STA ICCOM,X 235B A928 LDA #$28 ; 40 CHRS MAX 235D 9D4803 STA ICBLL,X 2360 A900 LDA #$00 2362 9D4903 STA ICBLH,X 2365 AD0303 LDA DSTATS ; DSTATS < 128? 2368 100D ^2377 BPL OBRDY 236A A9C5 OBERR LDA #LOW BERROR 236C 9D4403 STA ICBAL,X 236F A926 LDA #HIGH BERROR 2371 9D4503 STA ICBAH,X 2374 4C8123 JMP OBCIO 2377 A9B6 OBRDY LDA #LOW BREADY 2379 9D4403 STA ICBAL,X 237C A926 LDA #HIGH BREADY 237E 9D4503 STA ICBAH,X 2381 2056E4 OBCIO JSR CIOV EPROC ; VECTOR IN PROCEED INTERRUPT 2384 SPRCED PROC 2384 A99E LDA #LOW PRCVEC 2386 8D0202 STA VPRCED 2389 A926 LDA #HIGH PRCVEC 238B 8D0302 STA VPRCED+1 EPROC 238E 60 RTS INCLUDE D2:OPEN.ASM ATARI Macro Assembler Ver 1.0C Page 7 N: CIO HANDLER D2:OPEN.ASM CIO OPEN 238F 238F OPEN PROC ; PERFORM THE OPEN ; JSR GDIDX 238F 20 DB $20 2390 0000 DB 0,0 = 2392 Q SET * 2392 A521 LDA ZICDNO 2394 8DE223 STA OPNDCB+1 2397 A524 LDA ZICBAL 2399 8DE523 STA OPNDCB+4 239C A525 LDA ZICBAH 239E 8DE623 STA OPNDCB+5 23A1 A52A LDA ZICAX1 23A3 8DEB23 STA OPNDCB+10 23A6 9DD726 STA AX1SV,X 23A9 A52B LDA ZICAX2 23AB 8DEC23 STA OPNDCB+11 23AE 9DDB26 STA AX2SV,X 23B1 A00C LDY #$0C 23B3 B9E123 OPNL LDA OPNDCB,Y 23B6 990003 STA DCB,Y 23B9 88 DEY 23BA 10F7 ^23B3 BPL OPNL 23BC 2059E4 JSR SIOV ; SEND TO #FN ; RETURN DSTATS UNLESS = 144 ; IN WHICH CASE, DO A STATUS ; AND RETURN THE EXTENDED ERR ; FROM IT... 23BF AC0303 OPCERR LDY DSTATS ; GET SIO STATUS 23C2 C090 CPY #$90 ; ERR 144? 23C4 D006 ^23CC BNE OPDONE ; NOPE. RETURN DSTATS ; 144, GET EXTENDED ERROR 23C6 208B25 JSR STPOLL ; POLL FOR STATUS 23C9 ACED02 LDY DVSTAT+3 ; RESET BUFFER LENGTH + OFFSET 23CC A901 OPDONE LDA #$01 23CE 8DD626 STA TRIP ; JSR GDIDX 23D1 REL RJSR,0 23D1 +20 DB RJSR 23D2 +00 DB 0 23D3 +42 DB *-Q+1 += 23D4 Q SET * 23D4 A900 LDA #$00 23D6 9DEF26 STA RLEN,X 23D9 9DF726 STA TOFF,X ATARI Macro Assembler Ver 1.0C Page 8 N: CIO HANDLER D2:OPEN.ASM CIO OPEN 23DC 9DF326 STA ROFF,X 23DF 98 TYA 23E0 60 RTS ; AY = ERROR EPROC 23E1 71 OPNDCB DB DEVIDN ; DDEVIC 23E2 FF DB $FF ; DUNIT 23E3 4F DB 'O' ; DCOMND 23E4 80 DB $80 ; DSTATS 23E5 FF DB $FF ; DBUFL 23E6 FF DB $FF ; DBUFH 23E7 0F DB $0F ; DTIMLO 23E8 00 DB $00 ; DRESVD 23E9 00 DB $00 ; DBYTL 23EA 01 DB $01 ; DBYTH 23EB FF DB $FF ; DAUX1 23EC FF DB $FF ; DAUX2 INCLUDE D2:CLOSE.ASM ATARI Macro Assembler Ver 1.0C Page 9 N: CIO HANDLER D2:CLOSE.ASM CIO CLOSE 23ED 23ED CLOSE PROC 23ED 207126 JSR DIPRCD ; DIS INTRPS 23F0 A521 LDA ZICDNO 23F2 8D0C24 STA CLODCB+1 23F5 A00C LDY #$0C 23F7 B90B24 CLOL LDA CLODCB,Y 23FA 990003 STA DCB,Y 23FD 88 DEY 23FE 10F7 ^23F7 BPL CLOL 2400 2059E4 JSR SIOV ; FLUSH BUFFERS IF NEEDED 2403 20E924 JSR PFLUSH 2406 AC0303 LDY DSTATS 2409 98 TYA 240A 60 RTS EPROC 240B 71 CLODCB DB DEVIDN ; DDEVIC 240C FF DB $FF ; DUNIT 240D 43 DB 'C' ; DCOMND 240E 00 DB $00 ; DSTATS 240F 00 DB $00 ; DBUFL 2410 00 DB $00 ; DBUFH 2411 0F DB $0F ; DTIMLO 2412 00 DB $00 ; DRESVD 2413 00 DB $00 ; DBYTL 2414 00 DB $00 ; DBYTH 2415 00 DB $00 ; DAUX1 2416 00 DB $00 ; DAUX2 INCLUDE D2:GET.ASM ATARI Macro Assembler Ver 1.0C Page 10 N: CIO HANDLER D2:GET.ASM CIO GET 2417 2417 GET PROC ; JSR GDIDX 2417 REL RJSR,0 2417 +20 DB RJSR 2418 +00 DB 0 2419 +46 DB *-Q+1 += 241A Q SET * 241A BDEF26 LDA RLEN,X 241D D03D ^245C BNE :CDISC ; LEN > 0? ; LEN=0, DO A STATUS POLL ; AND UPDATE LEN 241F 208B25 JSR STPOLL ; JSR GDIDX 2422 REL RJSR,0 2422 +20 DB RJSR 2423 +00 DB 0 2424 +0B DB *-Q+1 += 2425 Q SET * 2425 ADEA02 LDA DVSTAT 2428 9DEF26 STA RLEN,X ; IF LEN=0, THEN RET EOF ; OTHERWISE, GET DATA FROM ; SIO. 242B D005 ^2432 BNE :SIGET 242D A088 LDY #EOF 242F A988 LDA #EOF 2431 60 RTS 2432 A521 :SIGET LDA ZICDNO 2434 8DA224 STA GETDCB+1 2437 207E26 JSR ICD2B 243A 8DA624 STA GETDCB+5 243D ADEA02 LDA DVSTAT 2440 8DA924 STA GETDCB+8 2443 8DAB24 STA GETDCB+10 2446 A00C LDY #$0C 2448 B9A124 GETL LDA GETDCB,Y 244B 990003 STA DCB,Y 244E 88 DEY 244F 10F7 ^2448 BPL GETL 2451 2059E4 JSR SIOV ; JSR GDIDX 2454 REL RJSR,0 2454 +20 DB RJSR 2455 +00 DB 0 2456 +32 DB *-Q+1 += 2457 Q SET * 2457 A900 LDA #$00 2459 9DF326 STA ROFF,X ATARI Macro Assembler Ver 1.0C Page 11 N: CIO HANDLER D2:GET.ASM CIO GET 245C ADEC02 :CDISC LDA DVSTAT+2 ; CHECK DISC 245F D005 ^2466 BNE :EOF2 ; NOPE. 2461 A988 LDA #EOF 2463 A088 LDY #EOF 2465 60 RTS 2466 BDEF26 :EOF2 LDA RLEN,X 2469 D000 ^246B BNE :UPDP 246B DEEF26 :UPDP DEC RLEN,X 246E BCF326 LDY ROFF,X 2471 E003 CPX #$03 2473 F017 ^248C BEQ :G3 2475 E002 CPX #$02 2477 F00E ^2487 BEQ :G2 2479 E001 CPX #$01 247B F005 ^2482 BEQ :G1 ; RETURN NEXT CHAR IN APROPOS ; BUFFER INTO A 247D B90027 :G0 LDA RBUF,Y 2480 500D ^248F BVC :GX 2482 B90028 :G1 LDA RBUF+$100,Y 2485 5008 ^248F BVC :GX 2487 B90029 :G2 LDA RBUF+$200,Y 248A 5003 ^248F BVC :GX 248C B9002A :G3 LDA RBUF+$300,Y 248F FEF326 :GX INC ROFF,X 2492 A8 TAY ; RESET TRIP IF LEN=0 2493 BDEF26 LDA RLEN,X 2496 D005 ^249D BNE :DONE 2498 A900 LDA #$00 249A 8DD626 STA TRIP 249D 98 :DONE TYA 249E A001 LDY #$01 ; SUCCESS 24A0 60 RTS ; DONE... EPROC 24A1 71 GETDCB DB DEVIDN ; DDEVIC 24A2 FF DB $FF ; DUNIT 24A3 52 DB 'R' ; DCOMND 24A4 40 DB $40 ; DSTATS 24A5 00 DB $00 ; DBUFL 24A6 FF DB $FF ; DBUFH 24A7 0F DB $0F ; DTIMLO 24A8 00 DB $00 ; DRESVD 24A9 FF DB $FF ; DBYTL 24AA 00 DB $00 ; DBYTH 24AB FF DB $FF ; DAUX1 24AC 00 DB $00 ; DAUX2 ATARI Macro Assembler Ver 1.0C Page 12 N: CIO HANDLER D2:NDEV.ASM CIO GET INCLUDE D2:PUT.ASM ATARI Macro Assembler Ver 1.0C Page 13 N: CIO HANDLER D2:PUT.ASM CIO PUT 24AD 24AD PUT PROC ; ADD TO TX BUFFER ; JSR GDIDX 24AD REL RJSR,0 24AD +20 DB RJSR 24AE +00 DB 0 24AF +59 DB *-Q+1 += 24B0 Q SET * 24B0 BCF726 LDY TOFF,X ; GET OFFSET 24B3 E003 P3 CPX #$03 24B5 D005 ^24BC BNE P2 24B7 99002E STA TBUF+$300,Y 24BA 5015 ^24D1 BVC POFF 24BC E002 P2 CPX #$02 24BE D005 ^24C5 BNE P1 24C0 99002D STA TBUF+$200,Y 24C3 500C ^24D1 BVC POFF 24C5 E001 P1 CPX #$01 24C7 D005 ^24CE BNE P0 24C9 99002C STA TBUF+$100,Y 24CC 5003 ^24D1 BVC POFF 24CE 99002B P0 STA TBUF,Y ; STORE CHAR 24D1 FEF726 POFF INC TOFF,X ; INC OFFSET 24D4 A001 LDY #$01 ; SUCCESSFUL ; FLUSH IF EOL OR FULL 24D6 C99B CMP #EOL ; EOL? 24D8 F00B ^24E5 BEQ :FLUSH ; FLUSH BUFFER ; JSR GDIDX ; GET OFFSET 24DA REL RJSR,0 24DA +20 DB RJSR 24DB +00 DB 0 24DC +2D DB *-Q+1 += 24DD Q SET * 24DD BCF726 LDY TOFF,X 24E0 E0FF CPX #$FF ; LEN = $FF? 24E2 F001 ^24E5 BEQ :FLUSH ; FLUSH BUFFER 24E4 60 RTS ; FLUSH BUFFER, IF ASKED. 24E5 20E924 :FLUSH JSR PFLUSH ; FLUSH BUFFER 24E8 60 RTS EPROC 24E9 PFLUSH PROC ; CHECK CONNECTION, AND EOF ; IF DISCONNECTED. 24E9 208B25 JSR STPOLL ; GET STATUS 24EC ADEC02 LDA DVSTAT+2 24EF D005 ^24F6 BNE :1 ATARI Macro Assembler Ver 1.0C Page 14 N: CIO HANDLER D2:PUT.ASM CIO PUT 24F1 A088 LDY #EOF 24F3 A988 LDA #EOF 24F5 60 RTS ;:1 JSR GDIDX ; GET DEV X 24F6 :1 REL RJSR,0 24F6 +20 DB RJSR 24F7 +00 DB 0 24F8 +1C DB *-Q+1 += 24F9 Q SET * 24F9 BDF726 LDA TOFF,X 24FC D003 ^2501 BNE :2 24FE 4C4225 JMP :DONE ; FILL OUT DCB FOR PUT FLUSH 2501 A521 :2 LDA ZICDNO 2503 8D4625 STA PUTDCB+1 ; PICK APROPOS BUFFER PAGE 2506 E003 CPX #$03 2508 F014 ^251E BEQ :TB3 250A E002 CPX #$02 250C F00C ^251A BEQ :TB2 250E E001 CPX #$01 2510 F004 ^2516 BEQ :TB1 2512 A92B :TB0 LDA #HIGH TBUF 2514 500A ^2520 BVC :TBX 2516 A92C :TB1 LDA #HIGH TBUF+1 2518 5006 ^2520 BVC :TBX 251A A92D :TB2 LDA #HIGH TBUF+2 251C 5002 ^2520 BVC :TBX 251E A92E :TB3 LDA #HIGH TBUF+3 ; FINISH DCB AND DO SIOV 2520 8D4A25 :TBX STA PUTDCB+5 2523 BDF726 LDA TOFF,X 2526 8D4D25 STA PUTDCB+8 2529 8D4F25 STA PUTDCB+10 252C A00C LDY #$0C 252E B94525 PFL LDA PUTDCB,Y 2531 990003 STA DCB,Y 2534 88 DEY 2535 10F7 ^252E BPL PFL 2537 2059E4 JSR SIOV ; CLEAR THE OFFSET CURSOR ; AND LENGTH ; JSR GDIDX 253A REL RJSR,0 253A +20 DB RJSR 253B +00 DB 0 ATARI Macro Assembler Ver 1.0C Page 15 N: CIO HANDLER D2:PUT.ASM CIO PUT 253C +44 DB *-Q+1 += 253D Q SET * 253D A900 LDA #$00 253F 9DF726 STA TOFF,X 2542 A001 :DONE LDY #$01 2544 60 RTS EPROC 2545 71 PUTDCB DB DEVIDN ; DDEVIC 2546 FF DB $FF ; DUNIT 2547 57 DB 'W' ; DCOMND 2548 80 DB $80 ; DSTATS 2549 00 DB $00 ; DBUFL 254A FF DB $FF ; DBUFH 254B 0F DB $0F ; DTIMLO 254C 00 DB $00 ; DRESVD 254D FF DB $FF ; DBYTL 254E 00 DB $00 ; DBYTH 254F FF DB $FF ; DAUX1 2550 00 DB $00 ; DAUX2 INCLUDE D2:STATUS.ASM ATARI Macro Assembler Ver 1.0C Page 16 N: CIO HANDLER D2:STATUS.ASM CIO STATUS 2551 ; IF TRIP, DO STATUS POLL ; OTHERWISE, RETURN SAVED ; STATUS... 2551 STATUS PROC 2551 206826 JSR ENPRCD ; ENABLE PRCD 2554 REL RJSR,0 2554 +20 DB RJSR 2555 +00 DB 0 2556 +1A DB *-Q+1 += 2557 Q SET * ; JSR GDIDX ; GET DEVICE# 2557 BDEF26 LDA RLEN,X ; GET RLEN 255A D005 ^2561 BNE STSLEN ; RLEN > 0? 255C ADD626 LDA TRIP 255F D00E ^256F BNE STTRI1 ; TRIP = 1? ; NO TRIP, RETURN SAVED LEN 2561 BDEF26 STSLEN LDA RLEN,X ; GET RLEN 2564 8DEA02 STA DVSTAT ; RET IN DVSTAT 2567 A900 LDA #$00 2569 8DEB02 STA DVSTAT+1 256C 4C8725 JMP STDONE ; DONE. ; DO POLL AND UPDATE RCV LEN 256F 208B25 STTRI1 JSR STPOLL ; POLL FOR ST ; IS <= 256? 2572 ADEB02 LDA DVSTAT+1 2575 D006 ^257D BNE STTRI2 ; > 256 2577 9DEF26 STA RLEN,X 257A 4C8225 JMP STTRIU ; UPDATE TRIP ; > 256, SET TO 256 257D A9FF STTRI2 LDA #$FF 257F 9DEF26 STA RLEN,X ; UPDATE TRIP FLAG 2582 D003 ^2587 STTRIU BNE STDONE 2584 8DD626 STA TRIP ; RLEN = 0 ; RETURN CONNECTED? FLAG. 2587 ADEC02 STDONE LDA DVSTAT+2 258A 60 RTS EPROC ; ASK FUJINET FOR STATUS 258B STPOLL PROC 258B A521 LDA ZICDNO ; IOCB # ATARI Macro Assembler Ver 1.0C Page 17 N: CIO HANDLER D2:STATUS.ASM CIO STATUS 258D 8DB225 STA STADCB+1 2590 A00C LDY #$0C 2592 B9B125 STPL LDA STADCB,Y 2595 990003 STA DCB,Y 2598 88 DEY 2599 10F7 ^2592 BPL STPL 259B 2059E4 JSR SIOV ; DO IT... ; MAX 256 BYTES WAITING. 259E ADEB02 LDA DVSTAT+1 25A1 F00A ^25AD BEQ STP2 25A3 A9FF LDA #$FF 25A5 8DEA02 STA DVSTAT 25A8 A900 LDA #$00 25AA 8DEB02 STA DVSTAT+1 ; A = CONNECTION STATUS 25AD ADEC02 STP2 LDA DVSTAT+2 25B0 60 RTS EPROC 25B1 71 STADCB DB DEVIDN ; DDEVIC 25B2 FF DB $FF ; DUNIT 25B3 53 DB 'S' ; DCOMND 25B4 40 DB $40 ; DSTATS 25B5 EA DB $EA ; DBUFL 25B6 02 DB $02 ; DBUFH 25B7 0F DB $0F ; DTIMLO 25B8 00 DB $00 ; DRESVD 25B9 04 DB $04 ; DBYTL 25BA 00 DB $00 ; DBYTH 25BB 00 DB $00 ; DAUX1 25BC 00 DB $00 ; DAUX2 INCLUDE D2:SPECIAL.ASM ATARI Macro Assembler Ver 1.0C Page 18 N: CIO HANDLER D2:SPECIAL.ASM CIO SPECIAL 25BD 25BD SPEC PROC ; HANDLE LOCAL COMMANDS. 25BD A522 LDA ZICCOM 25BF C90F CMP #$0F ; 15 = FLUSH 25C1 D006 ^25C9 BNE :1 ; NO. 25C3 20E924 JSR PFLUSH ; DO FLUSH 25C6 A001 LDY #$01 ; SUCCESS 25C8 60 RTS ; HANDLE SIO COMMANDS. ; GET DSTATS FOR COMMAND 25C9 A971 :1 LDA #DEVIDN ; $71 25CB 8D0003 STA DDEVIC 25CE A521 LDA ZICDNO ; UNIT # 25D0 8D0103 STA DUNIT 25D3 A9FF LDA #$FF ; DS INQ 25D5 8D0203 STA DCOMND 25D8 A940 LDA #DSREAD 25DA 8D0303 STA DSTATS 25DD A9FB LDA #LOW INQDS 25DF 8D0403 STA DBUFL 25E2 A926 LDA #HIGH INQDS 25E4 8D0503 STA DBUFH 25E7 A901 LDA #$01 25E9 8D0803 STA DBYTL 25EC A900 LDA #$00 25EE 8D0903 STA DBYTH 25F1 8D0B03 STA DAUXH 25F4 A90F LDA #$0F 25F6 8D0603 STA DTIMLO 25F9 A522 LDA ZICCOM 25FB 8D0A03 STA DAUXL 25FE 2059E4 JSR SIOV ; DO IT... 2601 AD0303 LDA DSTATS 2604 1002 ^2608 BPL :DSOK 2606 A8 :DSERR TAY ; RET THE ERR 2607 60 RTS ; WE GOT A DSTATS INQUIRY ; IF $FF, THE COMMAND IS ; INVALID 2608 ADFB26 :DSOK LDA INQDS 260B C9FF CMP #$FF ; INVALID? 260D D004 ^2613 BNE :DSGO ; DO THE CMD 260F A092 LDY #$92 ; UNIMP CMD 2611 98 TYA 2612 60 RTS ;:DSGO JSR GDIDX 2613 :DSGO REL RJSR,0 2613 +20 DB RJSR ATARI Macro Assembler Ver 1.0C Page 19 N: CIO HANDLER D2:SPECIAL.ASM CIO SPECIAL 2614 +00 DB 0 2615 +BF DB *-Q+1 += 2616 Q SET * 2616 A971 LDA #DEVIDN ; $71 2618 8D0003 STA DDEVIC 261B A522 LDA ZICCOM 261D 8D0203 STA DCOMND 2620 ADFB26 LDA INQDS 2623 8D0303 STA DSTATS 2626 E003 :DSG3 CPX #$03 2628 D004 ^262E BNE :DSG2 262A A92E LDA #HIGH TBUF+3 262C 5012 ^2640 BVC :DSGX 262E E002 :DSG2 CPX #$02 2630 D004 ^2636 BNE :DSG1 2632 A92D LDA #HIGH TBUF+2 2634 500A ^2640 BVC :DSGX 2636 E001 :DSG1 CPX #$01 2638 D004 ^263E BNE :DSG0 263A A92C LDA #HIGH TBUF+1 263C 5002 ^2640 BVC :DSGX 263E A92B :DSG0 LDA #HIGH TBUF 2640 8D0503 :DSGX STA DBUFH 2643 A900 LDA #$00 2645 8D0403 STA DBUFL 2648 8D0903 STA DBYTH 264B A90F LDA #$0F 264D 8D0603 STA DTIMLO 2650 A52A LDA ZICAX1 2652 1DD726 ORA AX1SV,X 2655 8D0A03 STA DAUXL 2658 A52B LDA ZICAX2 265A 1DDB26 ORA AX2SV,X 265D 8D0B03 STA DAUXH 2660 2059E4 JSR SIOV 2663 AC0303 LDY DSTATS 2666 98 TYA 2667 60 RTS EPROC INCLUDE D2:UTIL.ASM ATARI Macro Assembler Ver 1.0C Page 20 N: CIO HANDLER D2:UTIL.ASM UTILITY FUNCTIONS 2668 ; ENABLE PROCEED INTERRUPT 2668 AD02D3 ENPRCD LDA PACTL 266B 0901 ORA #$01 ; ENABLE BIT 0 266D 8D02D3 STA PACTL 2670 60 RTS ; DISABLE PROCEED INTERRUPT 2671 AD02D3 DIPRCD LDA PACTL 2674 29FE AND #$FE ; DISABLE BIT0 2676 8D02D3 STA PACTL 2679 60 RTS ; GET ZIOCB DEVNO - 1 INTO X 267A GDIDX PROC 267A A621 LDX ZICDNO ; IOCB UNIT # 267C CA DEX ; - 1 267D 60 RTS EPROC ; CONVERT ZICDNO TO BUFFER ; PAGE, RETURN IN A 267E ICD2B PROC 267E A621 LDX ZICDNO 2680 CA DEX 2681 E003 CPX #$03 2683 F014 ^2699 BEQ :3 2685 E002 CPX #$02 2687 F00C ^2695 BEQ :2 2689 E001 CPX #$01 268B F004 ^2691 BEQ :1 268D A927 :0 LDA #HIGH RBUF 268F 500C ^269D BVC :DONE 2691 A928 :1 LDA #HIGH RBUF + 1 2693 5008 ^269D BVC :DONE 2695 A929 :2 LDA #HIGH RBUF + 2 2697 5004 ^269D BVC :DONE 2699 A92A :3 LDA #HIGH RBUF + 3 269B 5000 ^269D BVC :DONE 269D 60 :DONE RTS EPROC ATARI Macro Assembler Ver 1.0C Page 21 N: CIO HANDLER D2:NDEV.ASM INITIALIZATION 269E ; PROCEED VECTOR 269E PRCVEC PROC 269E A901 LDA #$01 26A0 8DD626 STA TRIP 26A3 A955 LDA #$55 26A5 8DC602 STA $02C6 26A8 68 PLA 26A9 40 RTI EPROC ; --------- END OF CODE ----- ; DEVHDL TABLE FOR N: 26AA 8E23 CIOHND DW OPEN-1 26AC EC23 DW CLOSE-1 26AE 1624 DW GET-1 26B0 AC24 DW PUT-1 26B2 5025 DW STATUS-1 26B4 BC25 DW SPEC-1 ; BANNERS 26B6 2346554A49 BREADY DB '#FUJINET READY',$9B 4E45542052 454144599B 26C5 2346554A49 BERROR DB '#FUJINET ERROR',$9B 4E45542045 52524F529B ; VARIABLES 26D4 0000 DSAV DW $0000 26D6 = 0001 TRIP DS 1 ; INTR FLAG 26D7 = 0004 AX1SV DS MAXDEV ; AUX1 SAVE 26DB = 0004 AX2SV DS MAXDEV ; AUX2 SAVE 26DF = 0010 STSV DS 4*MAXDEV ; STATUS SAVE 26EF = 0004 RLEN DS MAXDEV ; RCV LEN 26F3 = 0004 ROFF DS MAXDEV ; RCV OFFSET 26F7 = 0004 TOFF DS MAXDEV ; TRX OFFSET 26FB = 0001 INQDS DS 1 ; DSTATS INQ ; BUFFERS (PAGE ALIGNED) 26FC = 2700 ORG * + $FF & $FF00 2700 = 0400 RBUF DS 256*MAXDEV ; RX 2B00 = 0400 TBUF DS 256*MAXDEV ; TX = 2F00 PGEND = * 2F00 END START no ERRORs, 182 Labels, $1A77 free. ATARI Macro Assembler Ver 1.0C Page 22 D2:NDEV.ASM AX1SV 26D7 7/22 19/34 21#41 AX2SV 26DB 7/25 19/37 21#42 BERROR 26C5 6/23 6/25 21#33 BREADY 26B6 6/29 6/31 21#30 CIOHND 26AA 4/53 4/55 21#21 CIOV E456 2#32 6/33 CLODCB 240B 9/ 9 9/11 9#26 CLOL 23F7 9#11 9/14 CLOSE 23ED 9# 6 21/22 n COLOR2 02C6 1#40 DAUXH 030B 1#59 18/36 19/38 DAUXL 030A 1#58 18/40 19/35 DBUFH 0305 1#53 18/31 19/27 DBUFL 0304 1#52 18/29 19/29 DBYTH 0309 1#57 18/35 19/30 DBYTL 0308 1#56 18/33 DCB 0300 1#47 1/48 1/49 1/50 1/51 1/52 1/53 1/54 1/55 1/56 1/57 1/58 1/59 7/29 9/12 10/49 14/50 17/ 9 DCOMND 0302 1#50 18/25 19/11 DDEVIC 0300 1#48 18/21 19/ 9 DEVIDN 0071 2#38 8/10 9/26 11/49 15/14 17/30 18/20 19/ 8 DIPRCD 2671 9/ 7 20#15 DOSINI 000C 1#34 4/10 4/13 4/17 4/19 n DRSVD 0307 1#55 DSAV 26D4 4/11 4/14 21#39 DSREAD 0040 2#39 18/26 DSTATS 0303 1#51 6/20 7/40 9/21 18/27 18/43 19/13 19/40 n DSWRIT 0080 2#40 DTIMLO 0306 1#54 18/38 19/32 DUNIT 0301 1#49 18/23 DVSTAT 02EA 1#42 7/47 10/27 10/43 11/ 6 13/60 16/26 16/28 16/37 16/54 17/17 17/20 17/22 17/26 ENPRCD 2668 16/11 20# 8 EOF 0088 2#42 10/35 10/36 11/ 8 11/ 9 13/62 14/ 6 EOL 009B 2#43 13/35 n GDIDX 267A 20#22 GET 2417 10# 6 21/23 GETDCB 24A1 10/40 10/42 10/44 10/45 10/48 11#49 GETL 2448 10#48 10/51 HATABS 031A 1#61 4/38 4/52 4/54 4/56 HFND 233B 4/39 4/41 4#51 n ICAX1 034A 2#19 n ICAX2 034B 2#20 n ICAX3 034C 2#21 n ICAX4 034D 2#22 n ICAX5 034E 2#23 n ICAX6 034F 2#24 ICBAH 0345 2#14 6/26 6/32 ICBAL 0344 2#13 6/24 6/30 ICBLH 0349 2#18 6/19 ICBLL 0348 2#17 6/17 ICCOM 0342 2#11 6/15 ICD2B 267E 10/41 20#31 n ICDNO 0341 2#10 ATARI Macro Assembler Ver 1.0C Page 23 D2:NDEV.ASM n ICHID 0340 2# 9 n ICPTH 0347 2#16 n ICPTL 0346 2#15 n ICSTA 0343 2#12 IHTBS 2329 4/23 4#32 INQDS 26FB 18/28 18/30 18/52 19/12 21#47 IOCB 0340 2# 8 2/ 9 2/10 2/11 2/12 2/13 2/14 2/15 2/16 2/17 2/18 2/19 2/20 2/21 2/22 2/23 2/24 MAXDEV 0004 2#41 21/41 21/42 21/43 21/44 21/45 21/46 21/53 21/54 MEMLO 02E7 1#41 4/25 4/27 5/ 6 5/ 8 n OBANR 2354 6#12 OBCIO 2381 6/27 6#33 n OBERR 236A 6#23 OBRDY 2377 6/21 6#29 n OPCERR 23BF 7#40 OPDONE 23CC 7/42 7#51 OPEN 238F 7# 6 21/21 OPNDCB 23E1 7/15 7/17 7/19 7/21 7/24 7/28 8#10 OPNL 23B3 7#28 7/31 P0 24CE 13/26 13#29 P1 24C5 13/22 13#25 P2 24BC 13/18 13#21 n P3 24B3 13#17 PACTL D302 2#28 20/ 8 20/10 20/15 20/17 PFL 252E 14#49 14/52 PFLUSH 24E9 9/19 13/50 13#54 18/13 PGEND 2F00 4/24 4/26 4/62 5/ 7 21#56 POFF 24D1 13/20 13/24 13/28 13#30 PRCVEC 269E 6/39 6/41 21# 8 PUT 24AD 13# 6 21/24 PUTDCB 2545 14/22 14/43 14/45 14/46 14/49 15#14 PUTREC 0009 2#37 6/14 Q 2616 7#13 7/57 7#58 10/12 10#13 10/25 10#26 10/58 10#59 13/14 13#15 13/41 13#42 14/13 14#14 14/62 15# 6 16/15 16#16 19/ 6 19# 7 n RADCX 007D 3#21 n RANDX 003D 3#30 n RBIT 002C 3# 8 RBUF 2700 11/27 11/29 11/31 11/33 20/41 20/44 20/47 20/50 21#53 n RCMPX 00DD 3#20 n RCPX 00EC 3#12 n RDEC 00CE 3#29 REL mac 3#33 7/55 10/10 10/23 10/56 13/12 13/39 14/60 16/13 RESET 2318 4/12 4/15 4/16 4/18 4#21 n RINC 00EE 3#23 n RINCX 00FE 3#19 n RJMP 004C 3#15 n RJMPI 006C 3#27 RJSR 0020 3# 9 7/55 10/10 10/23 10/56 13/12 13/39 14/11 14/60 16/13 18/61 n RLDA 00AD 3#13 n RLDAX 00BD 3#10 n RLDAY 00B9 3#17 ATARI Macro Assembler Ver 1.0C Page 24 D2:NDEV.ASM n RLDX 00AE 3#28 n RLDY 00AC 3#26 n RLDYX 00BC 3#22 RLEN 26EF 7/60 10/14 10/28 11/12 11/15 11/39 16/18 16/25 16/39 16/45 21#44 ROFF 26F3 7/62 10/61 11/16 11/34 21#45 n RORAX 001D 3#25 n RSBCX 00FD 3#31 n RSTA 008D 3#16 n RSTAX 009D 3#11 n RSTAY 0099 3#18 n RSTX 008E 3#14 n RSTY 008C 3#24 SIOV E459 2#33 7/33 9/16 10/53 14/53 17/13 18/41 19/39 SPEC 25BD 18# 6 21/26 n SPRCED 2384 6#38 STADCB 25B1 16/62 17/ 8 17#30 START 2300 4# 8 21/58 STATUS 2551 16#10 21/25 STDONE 2587 16/29 16/49 16#54 STP2 25AD 17/18 17#26 STPL 2592 17# 8 17/11 STPOLL 258B 7/46 10/20 13/59 16/33 16#60 STSLEN 2561 16/19 16#25 n STSV 26DF 21#43 STTRI1 256F 16/21 16#33 STTRI2 257D 16/38 16#44 STTRIU 2582 16/40 16#49 TBUF 2B00 13/19 13/23 13/27 13/29 14/33 14/35 14/37 14/39 19/16 19/20 19/24 19/26 21#54 TOFF 26F7 7/61 13/16 13/30 13/43 14/15 14/44 15/ 8 21#46 TRIP 26D6 7/52 11/42 16/20 16/50 21/10 21#40 VPRCED 0202 1#39 6/40 6/42 ZICAX1 002A 1#27 7/20 19/33 ZICAX2 002B 1#28 7/23 19/36 n ZICAX3 002C 1#29 n ZICAX4 002D 1#30 n ZICAX5 002E 1#31 n ZICAX6 002F 1#32 ZICBAH 0025 1#22 7/18 ZICBAL 0024 1#21 7/16 n ZICBLH 0029 1#26 n ZICBLL 0028 1#25 ZICCOM 0022 1#19 18/10 18/39 19/10 ZICDNO 0021 1#18 7/14 9/ 8 10/39 14/21 16/61 18/22 20/23 20/32 n ZICHID 0020 1#17 n ZICPTH 0027 1#24 n ZICPTL 0026 1#23 n ZICSTA 0023 1#20 ZIOCB 0020 1#16 1/17 1/18 1/19 1/20 1/21 1/22 1/23 1/24 1/25 1/26 1/27 1/28 1/29 1/30 1/31 1/32