I'm using the program C1P-Modem.65D Simple Serial I/O Modem Program written in BASIC which I found on Mark's Ohio Scientific page. http://osi.marks-lab.com/software/misc.html
I extracted the MODEM BASIC code from the disk image and then I load the BASIC program to my Superboard II via the RS232 port. The terminal is very limited as there is no escape sequence ANSI support but BASIC is under 3K in size.
My Video demo
https://youtu.be/hUMJbJfMKZI
My final Superboard II post. 300 baud terminal fun.
-
- Posts: 23
- Joined: Wed May 18, 2022 7:08 am
- Location: Blue Mountains, Australia
My final Superboard II post. 300 baud terminal fun.
Superboard II Rev B
-
- Posts: 216
- Joined: Tue Jul 08, 2014 4:03 pm
- Location: Canada
- Contact:
Re: My final Superboard II post. 300 baud terminal fun.
This is interesting stuff. Please keep posting!
How did you get the BASIC program off the disk?
How did you get the BASIC program off the disk?
Box stock Superboard II Rev. B
KLyball replica 600D, replica 610 & KLyball Data Separator
OMS SBME and SBME+ memory cards
OMS Digi-Mule expansion bus
KLyball memory card
KLyball replica 600D, replica 610 & KLyball Data Separator
OMS SBME and SBME+ memory cards
OMS Digi-Mule expansion bus
KLyball memory card
-
- Posts: 23
- Joined: Wed May 18, 2022 7:08 am
- Location: Blue Mountains, Australia
Re: My final Superboard II post. 300 baud terminal fun.
I opened the disk image file in WINOSI emulator and copied/pasted the MODEM BASIC to a text file.
Superboard II Rev B
-
- Posts: 216
- Joined: Tue Jul 08, 2014 4:03 pm
- Location: Canada
- Contact:
Re: My final Superboard II post. 300 baud terminal fun.
Makes sense. I'll have to make the time to give that a try.
Box stock Superboard II Rev. B
KLyball replica 600D, replica 610 & KLyball Data Separator
OMS SBME and SBME+ memory cards
OMS Digi-Mule expansion bus
KLyball memory card
KLyball replica 600D, replica 610 & KLyball Data Separator
OMS SBME and SBME+ memory cards
OMS Digi-Mule expansion bus
KLyball memory card
-
- Posts: 216
- Joined: Tue Jul 08, 2014 4:03 pm
- Location: Canada
- Contact:
Re: My final Superboard II post. 300 baud terminal fun.
Just had a gander. The BASIC program poke a machine language program into memory and executes it. I'll have to disassemble that someday.
Box stock Superboard II Rev. B
KLyball replica 600D, replica 610 & KLyball Data Separator
OMS SBME and SBME+ memory cards
OMS Digi-Mule expansion bus
KLyball memory card
KLyball replica 600D, replica 610 & KLyball Data Separator
OMS SBME and SBME+ memory cards
OMS Digi-Mule expansion bus
KLyball memory card
-
- Posts: 297
- Joined: Tue Sep 16, 2008 6:04 am
- Location: Madison, WI
- Contact:
Re: My final Superboard II post. 300 baud terminal fun.
So you piqued my interest. I had a closer look at the C1P modem program and found a few interesting things!
It is a program designed for the C1/C1E as well as C2/C4 with or without floppy.
It auto-configures for BASIC-IN-ROM or floppy based systems.
While running, <CTRL>B will exit the program, and <CTRL>D toggles local echo ON/OFF.
Under most cases it does not change the default serial word size/parity/stop bits/clock divisor thus 8N2/16
However on disk based C2/C4 The ACIA control byte is set to "2" aka 7E2/64 on line 4080 (a bug?), I believe it should be "21" 8N1/16
[EDIT: According to C4P Operations manual pg 64, C4PMF defaults to 1200 baud. Setting ACIA ctrl byte to "2" will set the ACIA to 300 baud for the modem connection J9, setting it to "1" restores 1200 baud operation i.e. 7E2/16]
It also sets ($F703=$34 which I think controls the CTS/DCD select line CB2 on PIA of 505CPU) which selects the alternate port [J9] on the back of C4P. Modem vs Printer?
When RUN, the BASIC program determines machine type and OS type. It relocates the modem USR routine depending on OS type, patching absolute addresses of the machine code as it goes. Then it patches for machine type, changing ACIA addresses if C2/C4, as well as changing screen output & other routines as appropriate for OS65D.
On a BASIC in ROM machine, the modem code is located from $0222 to $02FF and is called by a USR routine from BASIC. The code itself interfaces with the ROM kernel routines for scanning the keyboard, but doesn't call the normal getkey entry as it does not wait until a key is pressed to return. The code runs in a loop, sending any received characters to the BASIC screen print routine, polling the keyboard and either echoing key presses to the screen or just to the serial port.
When running under OS65D, the modem program is located at $4222 to $42FA, the C1E screen is toggled to run in 48x16 mode. The output routine is patched to use the OS65D screen printer, but keypolling still relies on the hijacked ROM kernal routines.
(The disk the program is located on is for the C1PMF, but the MODEM program itself will run under OS65D for C2/C4PMF etc.)
Since it relies on calling ROM based key poller subroutines in the OSI system ROMS, it requires an OSI SYNMON or SYN600 ROM. It does not work with a CEGMON or alternate ROM.
All in all, a deceptively simple and surprisingly versatile piece of coding!
Attached is the extracted BASIC program with the C4P OS65D port fix, below is the BASIC program listing with my notes in red.
10 REM MODEM PROGRAM
15 FORI=1TO30:PRINT:NEXT
20 PRINT"MODEM ROUTINE LOADING"
30 Y=PEEK(2):Z=PEEK(64774) :REM Y=4 on disk based, Z=32 on C1P
40 IFZ=32THENGOSUB3000:GOTO60
50 GOSUB4000
60 FORI=1TO32:PRINT:NEXT:PRINT"MODEM READY"
70 X=USR(X)
80 RESTORE:GOSUB500:IFY=4THENRUN"BEXEC*"
90 END
500 PS=1:IFPEEK(9800)=32THENPS=2 :REM C1PMF(9800)=32
510 IFY<>4ORZ<>32THENFORI=1TO48:READP:NEXT:RETURN
520 READP,C(1),C(2):IFPTHENPOKEP,C(PS):GOTO520
530 RETURN
540 DATA 9730,8,16
550 DATA 9743,7,15
560 DATA 9723,31,63
570 DATA 9736,31,63
580 DATA 9725,4,10
590 DATA 9738,29,59
610 DATA 9800,32,64
620 DATA 9636,101,75
630 DATA 9766,101,75
640 DATA 9770,101,75
650 DATA 9815,101,75
670 DATA 9670,125,123
680 DATA 9783,125,123
690 DATA 9682,95,164
990 DATA55296,0,1,0,0,0
1500 FORI=0+FTO216+F:READX
1510 IFX=-1THENX=INT(I/256)
1520 POKEI,X:NEXT
1530 RETURN
2000 DATA 32,13,37,173,0,240,74,144,6,173,1,240,32,67,35
2010 DATA 32,93,-1,240,239,201,2,240,22,201,4,240,21,72,32
2020 DATA 67,35,173,0,240,74,74,144,249,104,141,1,240,76,37
2030 DATA -1,76,13,37,173,63,-1,73,12,141,63,-1,208,225,138
2035 DATA 72,152,72
2040 DATA 169,1,32,190,252,32,198,252,208,5,10,208,245,240,83
2050 DATA 74,144,9,42,224,33,208,243,169,27,208,33,32,200,253
2060 DATA 152,141,19,2,10,10,10,56,237,19,2,141,19,2,168,138
2070 DATA 74,240,49,136,200,74,144,252,208,42,234,185,207,253,205
2080 DATA 21,2,208,38,206,20,2,240,43,160,5,162,200,202,208,253
2090 DATA 136,208,248,240,67,201,1,240,53,160,0,201,2,240,54,160
2100 DATA 192,201,32,240,48,169,0,141,22,2,141,21,2,169,2,141
2110 DATA 20,2,208,36,162,150,205,22,2,208,2,162,14,142,20,2
2120 DATA 141,22,2,169,1,32,190,252,32,207,252,74,144,3,76
2130 DATA 143,253,208,194,160,32,76,167,253,169,0,76,183,253
3000 GOSUB500
3005 IFY=4THENPOKE574,34:POKE575,66:F=16930:GOTO1500
3008 F=546:GOSUB1500
3010 POKE546,44:POKE592,96
3020 POKE559,251:POKE560,2:POKE576,251:POKE577,2
3030 POKE763,41:POKE764,127:POKE765,76:POKE766,45:POKE767,191
3040 POKE11,34:POKE12,2:RETURN
4000 GOSUB3000 :REM patch for C2/C4
4010 POKEF+65,141:POKEF+66,0:POKEF+67,223
4020 POKEF+68,174:POKEF+69,0:POKEF+70,223
4030 POKEF+193,141:POKEF+194,0:POKEF+195,223
4040 POKEF+196,173:POKEF+197,0:POKEF+198,223
4050 POKEF+1,68:POKEF+2,38
4060 POKEF+47,68:POKEF+48,38
4070 POKEF+5,252:POKEF+11,252:POKEF+34,252:POKEF+42,252
4080 IFY=4THENPOKE63235,52:POKE64512,21 :REM C4PMF 21 was 2 for 300bps
4090 RETURN
Assembler program listings after being patched & installed in various configurations:
It is a program designed for the C1/C1E as well as C2/C4 with or without floppy.
It auto-configures for BASIC-IN-ROM or floppy based systems.
While running, <CTRL>B will exit the program, and <CTRL>D toggles local echo ON/OFF.
Under most cases it does not change the default serial word size/parity/stop bits/clock divisor thus 8N2/16
However on disk based C2/C4 The ACIA control byte is set to "2" aka 7E2/64 on line 4080 (a bug?), I believe it should be "21" 8N1/16
[EDIT: According to C4P Operations manual pg 64, C4PMF defaults to 1200 baud. Setting ACIA ctrl byte to "2" will set the ACIA to 300 baud for the modem connection J9, setting it to "1" restores 1200 baud operation i.e. 7E2/16]
It also sets ($F703=$34 which I think controls the CTS/DCD select line CB2 on PIA of 505CPU) which selects the alternate port [J9] on the back of C4P. Modem vs Printer?
When RUN, the BASIC program determines machine type and OS type. It relocates the modem USR routine depending on OS type, patching absolute addresses of the machine code as it goes. Then it patches for machine type, changing ACIA addresses if C2/C4, as well as changing screen output & other routines as appropriate for OS65D.
On a BASIC in ROM machine, the modem code is located from $0222 to $02FF and is called by a USR routine from BASIC. The code itself interfaces with the ROM kernel routines for scanning the keyboard, but doesn't call the normal getkey entry as it does not wait until a key is pressed to return. The code runs in a loop, sending any received characters to the BASIC screen print routine, polling the keyboard and either echoing key presses to the screen or just to the serial port.
When running under OS65D, the modem program is located at $4222 to $42FA, the C1E screen is toggled to run in 48x16 mode. The output routine is patched to use the OS65D screen printer, but keypolling still relies on the hijacked ROM kernal routines.
(The disk the program is located on is for the C1PMF, but the MODEM program itself will run under OS65D for C2/C4PMF etc.)
Since it relies on calling ROM based key poller subroutines in the OSI system ROMS, it requires an OSI SYNMON or SYN600 ROM. It does not work with a CEGMON or alternate ROM.
All in all, a deceptively simple and surprisingly versatile piece of coding!
Attached is the extracted BASIC program with the C4P OS65D port fix, below is the BASIC program listing with my notes in red.
10 REM MODEM PROGRAM
15 FORI=1TO30:PRINT:NEXT
20 PRINT"MODEM ROUTINE LOADING"
30 Y=PEEK(2):Z=PEEK(64774) :REM Y=4 on disk based, Z=32 on C1P
40 IFZ=32THENGOSUB3000:GOTO60
50 GOSUB4000
60 FORI=1TO32:PRINT:NEXT:PRINT"MODEM READY"
70 X=USR(X)
80 RESTORE:GOSUB500:IFY=4THENRUN"BEXEC*"
90 END
500 PS=1:IFPEEK(9800)=32THENPS=2 :REM C1PMF(9800)=32
510 IFY<>4ORZ<>32THENFORI=1TO48:READP:NEXT:RETURN
520 READP,C(1),C(2):IFPTHENPOKEP,C(PS):GOTO520
530 RETURN
540 DATA 9730,8,16
550 DATA 9743,7,15
560 DATA 9723,31,63
570 DATA 9736,31,63
580 DATA 9725,4,10
590 DATA 9738,29,59
610 DATA 9800,32,64
620 DATA 9636,101,75
630 DATA 9766,101,75
640 DATA 9770,101,75
650 DATA 9815,101,75
670 DATA 9670,125,123
680 DATA 9783,125,123
690 DATA 9682,95,164
990 DATA55296,0,1,0,0,0
1500 FORI=0+FTO216+F:READX
1510 IFX=-1THENX=INT(I/256)
1520 POKEI,X:NEXT
1530 RETURN
2000 DATA 32,13,37,173,0,240,74,144,6,173,1,240,32,67,35
2010 DATA 32,93,-1,240,239,201,2,240,22,201,4,240,21,72,32
2020 DATA 67,35,173,0,240,74,74,144,249,104,141,1,240,76,37
2030 DATA -1,76,13,37,173,63,-1,73,12,141,63,-1,208,225,138
2035 DATA 72,152,72
2040 DATA 169,1,32,190,252,32,198,252,208,5,10,208,245,240,83
2050 DATA 74,144,9,42,224,33,208,243,169,27,208,33,32,200,253
2060 DATA 152,141,19,2,10,10,10,56,237,19,2,141,19,2,168,138
2070 DATA 74,240,49,136,200,74,144,252,208,42,234,185,207,253,205
2080 DATA 21,2,208,38,206,20,2,240,43,160,5,162,200,202,208,253
2090 DATA 136,208,248,240,67,201,1,240,53,160,0,201,2,240,54,160
2100 DATA 192,201,32,240,48,169,0,141,22,2,141,21,2,169,2,141
2110 DATA 20,2,208,36,162,150,205,22,2,208,2,162,14,142,20,2
2120 DATA 141,22,2,169,1,32,190,252,32,207,252,74,144,3,76
2130 DATA 143,253,208,194,160,32,76,167,253,169,0,76,183,253
3000 GOSUB500
3005 IFY=4THENPOKE574,34:POKE575,66:F=16930:GOTO1500
3008 F=546:GOSUB1500
3010 POKE546,44:POKE592,96
3020 POKE559,251:POKE560,2:POKE576,251:POKE577,2
3030 POKE763,41:POKE764,127:POKE765,76:POKE766,45:POKE767,191
3040 POKE11,34:POKE12,2:RETURN
4000 GOSUB3000 :REM patch for C2/C4
4010 POKEF+65,141:POKEF+66,0:POKEF+67,223
4020 POKEF+68,174:POKEF+69,0:POKEF+70,223
4030 POKEF+193,141:POKEF+194,0:POKEF+195,223
4040 POKEF+196,173:POKEF+197,0:POKEF+198,223
4050 POKEF+1,68:POKEF+2,38
4060 POKEF+47,68:POKEF+48,38
4070 POKEF+5,252:POKEF+11,252:POKEF+34,252:POKEF+42,252
4080 IFY=4THENPOKE63235,52:POKE64512,21 :REM C4PMF 21 was 2 for 300bps
4090 RETURN
Assembler program listings after being patched & installed in various configurations:
Code: Select all
;C1P BASIC-IN-ROM version
;-----------------------------------------------------------
0222 2C 0D 25 BIT $250D ;inactive code from disk version
0225 AD 00 F0 LDA $F000 ;check if character received
0228 4A LSR A
0229 90 06 BCC $0231
022B AD 01 F0 LDA $F001 ;load character from serial
022E 20 FB 02 JSR $02FB ;send to screen
0231 20 5D 02 JSR $025D ;get keypress
0234 F0 EF BEQ $0225 ;no keypress? loop to start
0236 C9 02 CMP #$02
0238 F0 16 BEQ $0250 ;^B ?
023A C9 04 CMP #$04 ;^D ?
023C F0 15 BEQ $0253
023E 48 PHA
023F 20 FB 02 JSR $02FB ;echo to screen when JSR
0242 AD 00 F0 LDA $F000 ;wait for serial out to finish
0245 4A LSR A
0246 4A LSR A
0247 90 F9 BCC $0242
0249 68 PLA
024A 8D 01 F0 STA $F001 ;send to serial out
024D 4C 25 02 JMP $0225 ;loop to start
0250 60 RTS ;exit to BASIC
0251 0D 25 .BYT $0D,$25 ;(2 leftover bytes from disk version)
0253 AD 3F 02 LDA $023F ;toggle between BIT and JSR instruction for local echo
0256 49 0C EOR #$0C
0258 8D 3F 02 STA $023F
025B D0 E1 BNE $023E
025D 8A TXA ;read keyboard without wait entry point
025E 48 PHA
025F 98 TYA
0260 48 PHA
0261 A9 01 LDA #$01
0263 20 BE FC JSR $FCBE
0266 20 C6 FC JSR $FCC6
0269 D0 05 BNE $0270
026B 0A ASL A
026C D0 F5 BNE $0263
026E F0 53 BEQ $02C3
0270 4A LSR A
0271 90 09 BCC $027C
0273 2A ROL A
0274 E0 21 CPX #$21
0276 D0 F3 BNE $026B
0278 A9 1B LDA #$1B
027A D0 21 BNE $029D
027C 20 C8 FD JSR $FDC8
027F 98 TYA
0280 8D 13 02 STA $0213
0283 0A ASL A
0284 0A ASL A
0285 0A ASL A
0286 38 SEC
0287 ED 13 02 SBC $0213
028A 8D 13 02 STA $0213
028D A8 TAY
028E 8A TXA
028F 4A LSR A
0290 F0 31 BEQ $02C3
0292 88 DEY
0293 C8 INY
0294 4A LSR A
0295 90 FC BCC $0293
0297 D0 2A BNE $02C3
0299 EA NOP
029A B9 CF FD LDA $FDCF,Y
029D CD 15 02 CMP $0215
02A0 D0 26 BNE $02C8
02A2 CE 14 02 DEC $0214
02A5 F0 2B BEQ $02D2
02A7 A0 05 LDY #$05
02A9 A2 C8 LDX #$C8
02AB CA DEX
02AC D0 FD BNE $02AB
02AE 88 DEY
02AF D0 F8 BNE $02A9
02B1 F0 43 BEQ $02F6
02B3 C9 01 CMP #$01
02B5 F0 35 BEQ $02EC
02B7 A0 00 LDY #$00
02B9 C9 02 CMP #$02
02BB F0 36 BEQ $02F3
02BD A0 C0 LDY #$C0
02BF C9 20 CMP #$20
02C1 F0 30 BEQ $02F3
02C3 A9 00 LDA #$00
02C5 8D 16 02 STA $0216
02C8 8D 15 02 STA $0215
02CB A9 02 LDA #$02
02CD 8D 14 02 STA $0214
02D0 D0 24 BNE $02F6
02D2 A2 96 LDX #$96
02D4 CD 16 02 CMP $0216
02D7 D0 02 BNE $02DB
02D9 A2 0E LDX #$0E
02DB 8E 14 02 STX $0214
02DE 8D 16 02 STA $0216
02E1 A9 01 LDA #$01 ;check for shift-lock keypress
02E3 20 BE FC JSR $FCBE ;(select inverted keyboard row)
02E6 20 CF FC JSR $FCCF ;(load inverted keyboard col)
02E9 4A LSR A
02EA 90 03 BCC $02EF
02EC 4C 8F FD JMP $FD8F ;part of keypoll routine
02EF D0 C2 BNE $02B3; <entry if no capslock pressed>
02F1 A0 20 LDY #$20
02F3 4C A7 FD JMP $FDA7
02F6 A9 00 LDA #$00
02F8 4C B7 FD JMP $FDB7
02FB 29 7F AND #$7F
02FD 4C 2D BF JMP $BF2D ;send to screen
; C1P DISK VERSION
;----------------------------------------------------
4222 20 0D 25 JSR $250D ;save contents of $0213-0217
4225 AD 00 F0 LDA $F000 ;check if character received
4228 4A LSR A
4229 90 06 BCC $4231
422B AD 01 F0 LDA $F001 ;load character from serial
422E 20 43 23 JSR $2343 ;out screen OS65D
4231 20 5D 42 JSR $425D
4234 F0 EF BEQ $4225
4236 C9 02 CMP #$02 ;^B
4238 F0 16 BEQ $4250
423A C9 04 CMP #$04 ;^D
423C F0 15 BEQ $4253
423E 48 PHA
423F 20 43 23 JSR $2343 ;out screen OS65D
4242 AD 00 F0 LDA $F000
4245 4A LSR A
4246 4A LSR A
4247 90 F9 BCC $4242 ;wait for serial out to clear
4249 68 PLA
424A 8D 01 F0 STA $F001 ;write to serial out
424D 4C 25 42 JMP $4225 ;loop to start
4250 4C 0D 25 JMP $250D ;restore contents of $0213-0217 & exit to BASIC via RTS
4253 AD 3F 42 LDA $423F
4256 49 0C EOR #$0C ;toggle local echo
4258 8D 3F 42 STA $423F
425B D0 E1 BNE $423E
425D 8A TXA ;read keyboard without wait entry point
425E 48 PHA
425F 98 TYA
4260 48 PHA
4261 A9 01 LDA #$01
4263 20 BE FC JSR $FCBE
4266 20 C6 FC JSR $FCC6
4269 D0 05 BNE $4270
426B 0A ASL A
426C D0 F5 BNE $4263
426E F0 53 BEQ $42C3
4270 4A LSR A
4271 90 09 BCC $427C
4273 2A ROL A
4274 E0 21 CPX #$21
4276 D0 F3 BNE $426B
4278 A9 1B LDA #$1B
427A D0 21 BNE $429D
427C 20 C8 FD JSR $FDC8
427F 98 TYA
4280 8D 13 02 STA $0213
4283 0A ASL A
4284 0A ASL A
4285 0A ASL A
4286 38 SEC
4287 ED 13 02 SBC $0213
428A 8D 13 02 STA $0213
428D A8 TAY
428E 8A TXA
428F 4A LSR A
4290 F0 31 BEQ $42C3
4292 88 DEY
4293 C8 INY
4294 4A LSR A
4295 90 FC BCC $4293
4297 D0 2A BNE $42C3
4299 EA NOP
429A B9 CF FD LDA $FDCF,Y
429D CD 15 02 CMP $0215
42A0 D0 26 BNE $42C8
42A2 CE 14 02 DEC $0214
42A5 F0 2B BEQ $42D2
42A7 A0 05 LDY #$05
42A9 A2 C8 LDX #$C8
42AB CA DEX
42AC D0 FD BNE $42AB
42AE 88 DEY
42AF D0 F8 BNE $42A9
42B1 F0 43 BEQ $42F6
42B3 C9 01 CMP #$01
42B5 F0 35 BEQ $42EC
42B7 A0 00 LDY #$00
42B9 C9 02 CMP #$02
42BB F0 36 BEQ $42F3
42BD A0 C0 LDY #$C0
42BF C9 20 CMP #$20
42C1 F0 30 BEQ $42F3
42C3 A9 00 LDA #$00
42C5 8D 16 02 STA $0216
42C8 8D 15 02 STA $0215
42CB A9 02 LDA #$02
42CD 8D 14 02 STA $0214
42D0 D0 24 BNE $42F6
42D2 A2 96 LDX #$96
42D4 CD 16 02 CMP $0216
42D7 D0 02 BNE $42DB
42D9 A2 0E LDX #$0E
42DB 8E 14 02 STX $0214
42DE 8D 16 02 STA $0216
42E1 A9 01 LDA #$01
42E3 20 BE FC JSR $FCBE
42E6 20 CF FC JSR $FCCF
42E9 4A LSR A
42EA 90 03 BCC $42EF
42EC 4C 8F FD JMP $FD8F
42EF D0 C2 BNE $42B3
42F1 A0 20 LDY #$20
42F3 4C A7 FD JMP $FDA7
42F6 A9 00 LDA #$00
42F8 4C B7 FD JMP $FDB7
;C4PMF DISK VERSION
;----------------------------------------------------
4222 20 44 26 JSR $2644 ;save keypoller values $0213-0217
4225 AD 00 FC LDA $FC00
4228 4A LSR A
4229 90 06 BCC $4231
422B AD 01 FC LDA $FC01
422E 20 43 23 JSR $2343
4231 20 5D 42 JSR $425D
4234 F0 EF BEQ $4225
4236 C9 02 CMP #$02
4238 F0 16 BEQ $4250
423A C9 04 CMP #$04
423C F0 15 BEQ $4253
423E 48 PHA
423F 20 43 23 JSR $2343
4242 AD 00 FC LDA $FC00
4245 4A LSR A
4246 4A LSR A
4247 90 F9 BCC $4242
4249 68 PLA
424A 8D 01 FC STA $FC01
424D 4C 25 42 JMP $4225
4250 4C 44 26 JMP $2644 ;restore keypoller values $0213-0217 & exit to BASIC via RTS
4253 AD 3F 42 LDA $423F
4256 49 0C EOR #$0C
4258 8D 3F 42 STA $423F
425B D0 E1 BNE $423E
425D 8A TXA
425E 48 PHA
425F 98 TYA
4260 48 PHA
4261 A9 01 LDA #$01
4263 8D 00 DF STA $DF00
4266 AE 00 DF LDX $DF00
4269 D0 05 BNE $4270
426B 0A ASL A
426C D0 F5 BNE $4263
426E F0 53 BEQ $42C3
4270 4A LSR A
4271 90 09 BCC $427C
4273 2A ROL A
4274 E0 21 CPX #$21
4276 D0 F3 BNE $426B
4278 A9 1B LDA #$1B
427A D0 21 BNE $429D
427C 20 C8 FD JSR $FDC8
427F 98 TYA
4280 8D 13 02 STA $0213
4283 0A ASL A
4284 0A ASL A
4285 0A ASL A
4286 38 SEC
4287 ED 13 02 SBC $0213
428A 8D 13 02 STA $0213
428D A8 TAY
428E 8A TXA
428F 4A LSR A
4290 F0 31 BEQ $42C3
4292 88 DEY
4293 C8 INY
4294 4A LSR A
4295 90 FC BCC $4293
4297 D0 2A BNE $42C3
4299 EA NOP
429A B9 CF FD LDA $FDCF,Y
429D CD 15 02 CMP $0215
42A0 D0 26 BNE $42C8
42A2 CE 14 02 DEC $0214
42A5 F0 2B BEQ $42D2
42A7 A0 05 LDY #$05
42A9 A2 C8 LDX #$C8
42AB CA DEX
42AC D0 FD BNE $42AB
42AE 88 DEY
42AF D0 F8 BNE $42A9
42B1 F0 43 BEQ $42F6
42B3 C9 01 CMP #$01
42B5 F0 35 BEQ $42EC
42B7 A0 00 LDY #$00
42B9 C9 02 CMP #$02
42BB F0 36 BEQ $42F3
42BD A0 C0 LDY #$C0
42BF C9 20 CMP #$20
42C1 F0 30 BEQ $42F3
42C3 A9 00 LDA #$00
42C5 8D 16 02 STA $0216
42C8 8D 15 02 STA $0215
42CB A9 02 LDA #$02
42CD 8D 14 02 STA $0214
42D0 D0 24 BNE $42F6
42D2 A2 96 LDX #$96
42D4 CD 16 02 CMP $0216
42D7 D0 02 BNE $42DB
42D9 A2 0E LDX #$0E
42DB 8E 14 02 STX $0214
42DE 8D 16 02 STA $0216
42E1 A9 01 LDA #$01
42E3 8D 00 DF STA $DF00
42E6 AD 00 DF LDA $DF00
42E9 4A LSR A
42EA 90 03 BCC $42EF
42EC 4C 8F FD JMP $FD8F
42EF D0 C2 BNE $42B3
42F1 A0 20 LDY #$20
42F3 4C A7 FD JMP $FDA7
42F6 A9 00 LDA #$00
42F8 4C B7 FD JMP $FDB7
42FB 00 BRK
42FC 00 BRK
42FD 00 BRK
42FE 00 BRK
42FF 00 BRK
- Attachments
-
- modem.txt
- BASIC "Modem" program text only without embedded NULLs
- (2.41 KiB) Downloaded 149 times
-
- modem.bas
- BASIC "Modem" program for OS65D or ROM based video systems C1P/C1E/C2/C4P/C8 in OSI SAVE file format
- (3 KiB) Downloaded 146 times
Last edited by Mark on Tue Jul 05, 2022 6:16 am, edited 1 time in total.
-
- Posts: 23
- Joined: Wed May 18, 2022 7:08 am
- Location: Blue Mountains, Australia
Re: My final Superboard II post. 300 baud terminal fun.
Thanks, Mark this is good stuff.
Superboard II Rev B