|
Subject: [stella] Teleterm 2600 From: "John K. Harvey" <jkharvey@xxxxxxxxxxx> Date: Tue, 07 Aug 2001 18:07:09 -0500 |
Hi all, Speaking of net-demos, Well, here's a little rs232 demo I wrote up last summer. It transfers at 300 bauds via joystick 2 pinouts. I can't remember which pin it transfers on, but I made a cable which connected 2 9-pin connectors via pins 1 to 3, 3 to 1, 4 to 2, and 2 to 4, but I made the demo rs232 compliant, so only 2 of those wires should really be useful. To test on itself, take a 9-pin connector and wire pin 1 to 3 and pin 2 to 4. Anyway, I've got another project I'm working on, so I'm allowing people to look at the code and bin file, to fire up some ideas. Don't know if its comments are any good, but who can say? After all, I wrote this a year ago. Enjoy! -John
; update 11/6/2000
; sends/receives ASCII data!
processor 6502
include vcs.h
; SEND
; $80 - $85
; $86 - $8B
; $8C - $91
; $92 - $97
; $98 - $9D
; $9E - $A3
; $A4 - $A9
; RECEIVE
; $AA - $AF
; $B0 - B5
; $B6 - $BB
; $BC - $C1
; $C2 - $C7
; $C8 - $CD
; $CE - $D3
AlphaPtr = $D4
DirectionBit = $D5
T0 = $D6 ; d6,d7,d8,d9,dA,dB,dC
Temp = $DD ; one WORD
Temp2 = $DF ; one byte during ShiftLoop
Temp3 = $E0 ; one byte during Rub
IncomingByte = $E1
InBitCount = $E2
AreWeReceiving = $E3 ; will emulate 1 bit
InTripleCount = $E4
ThreeBits = $E5
InFirstEight = $E6
InNextSeven = $E7
OutGoingByte = $E8
OutBitCount = $E9
AreWeSending = $EA
SevenOrEight = $EB
T1 = $EC ; $EC,ED,EE,EF,F0,F1,F2
Flag = $F3
Flag2 = $F4
TempCount = $F5
TempChecker = $F6
org $F000
Start
SEI ; Disable interrupts, if there are any.
CLD ; Clear BCD math bit.
LDX #$FF
TXS ; Set stack to beginning.
LDA #0
B1 STA 0,X
DEX
BNE B1
Startup
LDA #144
STA COLUBK
LDA #%01000000
STA DirectionBit
LDA #%00001100
STA SWACNT ; set our inputs and outputs (we only actually
; use D2 as an output.
STA SWCHA ; send a 1, as required for RS232
STA AreWeReceiving
LDA #%00000111
STA ThreeBits
LDA #1
STA InTripleCount
LDA #$FF
STA InFirstEight ; must be $FF so that we don't accidentally
STA InNextSeven ; think that we've got an immediate lead-in zero.
JMP VerticalSync
OverScan ; [30 scanlines]
; !!!!!!!!! INSERT CODE HERE !!!!!!!!!!!
STA WSYNC ; [1]
;************* RECEIVE 7-7 *************
LDA SWCHA
ROR
ROL InNextSeven
;************* RECEIVE *************
STA WSYNC ; [2]
; $$$ 16 scanlines emulated with a timer
LDA #19 ; formerly 18: if > 1201 cycles, you're screwed.
STA TIM64T
JSR Receive
OverLoop1
LDA INTIM
BNE OverLoop1
STA WSYNC ; [18]
JSR Send ; *** Fifth SEND *** need 3 receives
STA WSYNC ; [19]
;************* RECEIVE 8-1 *************
LDA SWCHA
ROR
ROL InFirstEight
;************* RECEIVE *************
STA WSYNC ; [20]
LDA #12 ; 10 scanlines worth
STA TIM64T
; !!!!!!!!! INSERT CODE HERE !!!!!!!!!!!
OverLoop2
LDA INTIM
BNE OverLoop2
STA WSYNC ; [30]
VerticalSync ; [3]
LDA #2
STA VSYNC ; Begin vertical sync.
STA WSYNC ; [1]
STA WSYNC ; [2]
LDA #0
STA WSYNC ; [3]
STA VSYNC ; (0)
GameCalc ; [37]
LDA #4 ; 3 scanlines worth
STA TIM64T
; !!!!!!!!! INSERT CODE HERE !!!!!!!!!!!
CalcLoop1
LDA INTIM
BNE CalcLoop1
STA WSYNC ; [3]
;************* RECEIVE 8-2 *************
LDA SWCHA
ROR
ROL InFirstEight
;************* RECEIVE *************
STA WSYNC ; [4]
LDA #19 ; 16 scanlines worth
STA TIM64T
LDA #$A4 ; 2
STA Temp ; 3
JSR GameCalc2
; !!!!!!!!! INSERT CODE HERE !!!!!!!!!!!
CalcLoop2
LDA INTIM
BNE CalcLoop2
STA WSYNC ; [20]
; !!!!!!!!! INSERT CODE HERE !!!!!!!!!!!
STA WSYNC ; [21]
;************* RECEIVE 8-3 *************
LDA SWCHA
ROR
ROL InFirstEight
;************* RECEIVE *************
STA WSYNC ; [22]
LDA #18 ; 15 scanlines worth
STA TIM64T
; !!!!!!!!! INSERT CODE HERE !!!!!!!!!!!
LDA #$CE
STA Temp
LDA Flag2
BEQ NotRubbing
JSR Rub
JMP CalcLoop3
NotRubbing
LDA Flag
CMP #1
BNE TryAgain
JSR GameCalc3
JMP CalcLoop3
TryAgain
LDA Flag
CMP #2
BNE CalcLoop3
JSR ReceiveSetup
CalcLoop3
LDA INTIM
BNE CalcLoop3
STA WSYNC ; [37]
DrawScreen
LDA #0
STA VBLANK ; (0)
LDA #50
STA COLUPF
JSR Send ; *** FIRST SEND *** need 3 receives
STA WSYNC ; [1]
LDA #1
STA CTRLPF
LDA #200 ;formerly 80
STA COLUP0
STA COLUP1
LDA #35
STA NUSIZ0
LDA #51
STA NUSIZ1
LSR
STA VDELP0
STA VDELP1
LDA #%11100000 ; or %00010000
STA HMP0
STA RESP0
STA RESP1
DEY
LDA #%11110000 ; or %00100000
STA HMP1
;************* RECEIVE 8-4 *************
LDA SWCHA
ROR
ROL InFirstEight
;************* RECEIVE *************
STA WSYNC ; [2]
STA HMOVE
LDA #$FD
STA PF2
LDY #8
ScanLoop1A
STA WSYNC ; [10]
DEY
BNE ScanLoop1A
LDA #0
STA VDELP0
STA VDELP1
STA NUSIZ0
STA NUSIZ1
LDY #7
ScanLoop2A
STA WSYNC ; [18]
LDA #0
STA COLUPF
LDA SendWord,Y
STA GRP0
LDA SendWord2,Y
STA GRP1
DEY
BPL ScanLoop2A
LDA #50
STA COLUPF
;************* RECEIVE 8-5 *************
LDA SWCHA
ROR
ROL InFirstEight
;************* RECEIVE *************
STA WSYNC ; [19]
LDA #0
STA GRP0
STA GRP1
LDY #9
ScanLoop3A
STA WSYNC ; [28]
DEY
BNE ScanLoop3A
LDA #35
STA NUSIZ0
LDA #51
STA NUSIZ1
LSR
STA VDELP0
STA VDELP1
LDA #0
STA COLUPF
; fixable
STA WSYNC ; [29]
LDA $80
STA GRP0
LDA $81
STA GRP1
LDA $82
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $85
LDX $84
LDA $83
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [30]
LDA $86
STA GRP0
LDA $87
STA GRP1
LDA $88
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $8B
LDX $8A
LDA $89
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [31]
LDA $8C
STA GRP0
LDA $8D
STA GRP1
LDA $8E
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $91
LDX $90
LDA $8F
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [32]
LDA $92
STA GRP0
LDA $93
STA GRP1
LDA $94
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $97
LDX $96
LDA $95
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [33]
LDA $98
STA GRP0
LDA $99
STA GRP1
LDA $9A
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $9D
LDX $9C
LDA $9B
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [34]
LDA $9E
STA GRP0
LDA $9F
STA GRP1
LDA $A0
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $A3
LDX $A2
LDA $A1
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [35]
LDA $A4
STA GRP0
LDA $A5
STA GRP1
LDA $A6
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $A9
LDX $A8
LDA $A7
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [36]
LDA #0
STA GRP0
STA GRP1
STA GRP0
STA GRP1
;************* RECEIVE 8-6 *************
LDA SWCHA
ROR
ROL InFirstEight
;************* RECEIVE *************
STA WSYNC ; [37]
LDA #50
STA COLUPF
; waste 15 cycles + 1 for send
LDY #15
ScanLoop4A
STA WSYNC ; [52]
DEY
BNE ScanLoop4A
JSR Send ; *** Second SEND *** need 3 receives
STA WSYNC ; [53]
;************* RECEIVE 8-7 *************
LDA SWCHA
ROR
ROL InFirstEight
;************* RECEIVE *************
STA WSYNC ; [54]
LDA #0
STA VDELP0
STA VDELP1
STA NUSIZ0
STA NUSIZ1
STA WSYNC ; [55]
STA WSYNC ; [56]
LDY #7
ScanLoop5A
STA WSYNC ; [64]
LDA #0
STA COLUPF
LDA RecWord,Y
STA GRP0
LDA RecWord2,Y
STA GRP1
DEY
BPL ScanLoop5A
LDA #50
STA COLUPF
LDY #7
ScanLoop6A
STA WSYNC ; [71]
DEY
BNE ScanLoop6A
STY GRP0
STY GRP1
LDA #35
STA NUSIZ0
LDA #51
STA NUSIZ1
LSR
STA VDELP0
STA VDELP1
;************* RECEIVE 8-8 *************
LDA SWCHA
ROR
ROL InFirstEight
;************* RECEIVE *************
STA WSYNC ; [72]
; waste 8 cycles
LDY #7
ScanLoop5
STA WSYNC ; [79]
DEY
BNE ScanLoop5
LDA #0
STA COLUPF
STA WSYNC ; [80]
LDA $AA
STA GRP0
LDA $AB
STA GRP1
LDA $AC
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $AF
LDX $AE
LDA $AD
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [81]
LDA $B0
STA GRP0
LDA $B1
STA GRP1
LDA $B2
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $B5
LDX $B4
LDA $B3
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [82]
LDA $B6
STA GRP0
LDA $B7
STA GRP1
LDA $B8
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $BB
LDX $BA
LDA $B9
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [83]
LDA $BC
STA GRP0
LDA $BD
STA GRP1
LDA $BE
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $C1
LDX $C0
LDA $BF
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [84]
LDA $C2
STA GRP0
LDA $C3
STA GRP1
LDA $C4
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $C7
LDX $C6
LDA $C5
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [85]
LDA $C8
STA GRP0
LDA $C9
STA GRP1
LDA $CA
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $CD
LDX $CC
LDA $CB
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [86]
LDA $CE
STA GRP0
LDA $CF
STA GRP1
LDA $D0
STA GRP0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LDY $D3
LDX $D2
LDA $D1
STA GRP1
STX GRP0
STY GRP1
STX GRP0
STA WSYNC ; [87]
LDA #0
STA GRP0
STA GRP1
STA GRP0
STA GRP1
STA WSYNC ; [88]
LDA #50
STA COLUPF
;************* RECEIVE 7-1 *************
LDA SWCHA
ROR
ROL InNextSeven
;************* RECEIVE *************
STA WSYNC ; [89]
; waste 16 cycles + 1 for send
LDY #16
ScanLoop6
STA WSYNC ; [105]
DEY
BNE ScanLoop6
JSR Send ; *** Third SEND *** need 3 receives
STA WSYNC ; [106]
;************* RECEIVE 7-2 *************
LDA SWCHA
ROR
ROL InNextSeven
;************* RECEIVE *************
STA WSYNC ; [107]
; waste 16 cycles
LDY #16
ScanLoop7
STA WSYNC ; [123]
DEY
BNE ScanLoop7
;************* RECEIVE 7-3 *************
LDA SWCHA
ROR
ROL InNextSeven
;************* RECEIVE *************
STA WSYNC ; [124]
STY NUSIZ0
STY NUSIZ1
STY VDELP0
STY VDELP1
STY COLUPF
ScanLoop8
STA WSYNC ; [132]
LDA Arrow,Y
STA GRP0
INY
CPY #8
BNE ScanLoop8
STA WSYNC ; [133]
LDA #0
STA GRP0
LDY #7
LDX AlphaPtr
DrawChar
STA WSYNC ; [141]
LDA Alphabet,X
STA GRP0
INX
DEY
BPL DrawChar
;************* RECEIVE 7-4 *************
LDA SWCHA
ROR
ROL InNextSeven
;************* RECEIVE *************
STA WSYNC ; [142]
; waste 15 cycles + 1 for send
INY
STY GRP0
LDY #7
ScanLoop9A
STA WSYNC ; [150]
LDA Arrow,Y
STA GRP0
DEY
BPL ScanLoop9A
LDY #7
ScanLoop9
STA WSYNC ; [157]
DEY
BNE ScanLoop9
JSR Send ; *** Fourth SEND *** need 3 receives
STA WSYNC ; [158]
;************* RECEIVE 7-5 *************
LDA SWCHA
ROR
ROL InNextSeven
;************* RECEIVE *************
STA WSYNC ; [159]
; waste 17 cycles
LDY #17
ScanLoop10
STA WSYNC ; [176]
DEY
BNE ScanLoop10
;************* RECEIVE 7-6 *************
LDA SWCHA
ROR
ROL InNextSeven
;************* RECEIVE *************
STA WSYNC ; [177]
; waste 14 cycles
LDY #14
ScanLoop11
STA WSYNC ; [191]
DEY
BNE ScanLoop11
LDA #2
STA VBLANK ; (2)
STA WSYNC ; [192]
JMP OverScan
GameCalc2
LDA DirectionBit
ROL
ROL
BPL NotPrintingData
ROL
BPL ShiftHop
JMP Rub
ShiftHop
JMP ShiftLoop
NotPrintingData
LDA AlphaPtr
AND #7
BNE MoveAlpha
LDA SWCHA
ROL
ROL
BPL Left
ROL
BPL Right
JMP Button
MoveAlpha
LDA DirectionBit
BPL Up
DEC AlphaPtr
RTS
Up INC AlphaPtr
RTS
Left
LDA #%01111111
AND DirectionBit
STA DirectionBit
INC AlphaPtr
RTS
Right
LDA #%10000000
ORA DirectionBit
STA DirectionBit
DEC AlphaPtr
RTS
Button
LDA DirectionBit
ROL
BPL StatePressed
LDA INPT4
BPL JustPressed
RTS
StatePressed
LDA INPT4
BPL StillPressed
LDA #%01000000
ORA DirectionBit
STA DirectionBit
StillPressed
RTS
JustPressed
LDA #%10111111
AND DirectionBit
STA DirectionBit
LDA #%00100000
ORA DirectionBit
STA DirectionBit
; Send
LDA AlphaPtr ; 2
CLC
LSR
LSR
LSR
TAY
LDA ASCIITable,Y
STA OutGoingByte ; 3
LDA #1 ; 2
STA AreWeSending ; 3
LDA #10 ; 2
STA OutBitCount ; 3
NewStuff
LDA AlphaPtr
; AND #%11111000 ; not necessary, as button was pressed
CMP #%00001000
BEQ Rubbing
CMP #0
BNE NotSpace
LDX #6
LDA #0
Loop2 STA T0,X
DEX
BPL Loop2
LDA #3
STA Temp2
RTS
NotSpace
LDY #6
Loop TYA
CLC
ADC AlphaPtr
TAX
LDA Alphabet,X
STA T0,Y
DEY
BPL Loop
LDA AlphaPtr
CLC
LSR
LSR
LSR
TAY
LDA Shifts,Y
STA Temp2 ; # of shifts
RTS ; we're set up, so let's return
Rubbing
LDA #%00110000
ORA DirectionBit
STA DirectionBit
RTS ; we're set up, so let's return.
ShiftLoop
; Note: Temp is determined at the start of gamecalc
; it tells which field of charaters to move
LDX #6 ;rows ; 2 [8]
RowLoop ROL T0,X ; 6
LDY #5 ;columns ; 2
ColLoop LDA (Temp),Y ;14 cycle inner loop (not accounting for +1)
ROL ; total = 15*5 + 14 = 89
STA (Temp),Y
DEY
BPL ColLoop
LDA Temp ;3 ; 100
SEC ; 2
SBC #6 ; 2
STA Temp ; 3
DEX ; 2
BPL RowLoop ; 2 => 112*6 + 111 = [783]
DEC Temp2
BPL OutHere
LDA #%11011111
AND DirectionBit
STA DirectionBit
; Play a sound!
OutHere RTS
Rub
; Note: Temp is determined at the start of gamecalc
; it tells which field of charaters to move
LDX #6
STX TempCount
LDY #0
STY TempChecker ; where we will rotate the bits. If empty, we're done
CLC
RowLoop2 LDA (Temp),Y
ROR
STA (Temp),Y
INY
DEX
BNE RowLoop2
ROR TempChecker ; rotate the carry bits into a temp reg.
LDA Temp
SEC
SBC #6
STA Temp
LDX #6
LDY #0
CLC
DEC TempCount
BPL RowLoop2
LDA TempChecker
BNE OutofHere
LDA Temp
CMP #122
BNE BottomScroll
LDA #%11001111
AND DirectionBit
STA DirectionBit
RTS
BottomScroll
LDA #0
STA Flag2
STA Flag
OutofHere
RTS
ReceiveSetup
LDA #1
STA Flag
LDA IncomingByte
; AND #%11111000 ; not necessary, as button was pressed
CMP #8 ; ASCII backspace
BEQ Rubbing2
CMP #32
BNE NotSpace2
LDX #6
LDA #0
Loop22 STA T1,X
DEX
BPL Loop22
LDA #3
STA Temp3
RTS
NotSpace2
CMP #63
BNE NotQuestion
LDA #5
STA IncomingByte
BNE FinalSetup
NotQuestion
CMP #45
BNE NotHyphen
LDA #4
STA IncomingByte
BNE FinalSetup
NotHyphen
CMP #46
BNE NotPeriod
LDA #3
STA IncomingByte
BNE FinalSetup
NotPeriod
CMP #33
BNE NotExclaim
LDA #2
STA IncomingByte
BNE FinalSetup
NotExclaim
LDA IncomingByte
SEC
SBC #59
FinalSetup
CLC
ASL
ASL
ASL
STA IncomingByte
LDY #6
Loop1 TYA
CLC
ADC IncomingByte
TAX
LDA Alphabet,X
STA T1,Y
DEY
BPL Loop1
LDA IncomingByte
CLC
LSR
LSR
LSR
TAY
LDA Shifts,Y
STA Temp3 ; # of shifts
RTS ; we're set up, so let's return
Rubbing2
LDA #1
STA Flag2
RTS ; we're set up, so let's return.
GameCalc3
; Note: Temp is determined at the start of gamecalc
; it tells which field of charaters to move
LDX #6 ;rows ; 2 [8]
RowLoop3 ROL T1,X ; 6
LDY #5 ;columns ; 2
ColLoop3 LDA (Temp),Y ;14 cycle inner loop (not accounting for +1)
ROL ; total = 15*5 + 14 = 89
STA (Temp),Y
DEY
BPL ColLoop3
LDA Temp ;3 ; 100
SEC ; 2
SBC #6 ; 2
STA Temp ; 3
DEX ; 2
BPL RowLoop3 ; 2 => 112*6 + 111 = [783]
DEC Temp3
BPL OutHere3
LDA #0
STA Flag
; Play a sound!
OutHere3
RTS
ORG $FC00
; ******** SEND ***********
; = including JSR and RTS's
; 17 cycles OR
; 38 cycles
; 40 cycles
; 46
; 47
; 6 for JSR
Send LDA AreWeSending ; 3
BNE YesSending ; 2 ; 11
RTS ; 6
YesSending ; +1
DEC OutBitCount ; 5
LDA OutBitCount ; 3 must be here forthe cmp later!
BEQ LastOutBit ; 2 ; 22
CMP #9 ; 2
BNE NotFirstOutBit ; 2 ; 26
FirstBittoSend
LDA #0 ; 2
STA SWCHA ; 4 ;%xxxxx0xx ; Send a 0.
RTS ; 6 [38]
LastOutBit ; +1
LDA #%00000100 ; 2 ; store a 1 to SWCHA
STA SWCHA ; 4
LDA #0 ; 2 ; we're no longer sending
STA AreWeSending ; 3
RTS ; 6 [40]
NotFirstOutBit ; +1
ROR OutGoingByte ; 5 ; bit is now in carry flag
BCS SetCarry ; 2 ; 34
LDA #0 ; 2
STA SWCHA ; 4
RTS ; 6 [46]
SetCarry ; +1
LDA #%00000100 ; 2
STA SWCHA ; 4
RTS ; 6 [47]
NextSeven
LDX #8
RestofSeven
DEX
BNE HereForSeven
RTS
Receive
ROL InNextSeven ; to make the ROL easier later
LDY #9
Again
TYA
BEQ RestofSeven
DEY
BEQ NextSeven
ROL InFirstEight
JMP ThruRec
HereForSeven
ROL InNextSeven
ThruRec
LDA ThreeBits
ROL
AND #%00000111
STA ThreeBits
DEC InTripleCount
BEQ ProbCheck
JMP Again
ProbCheck ; we have 3 new bits
LDA AreWeReceiving
BNE NotReceivingYet
LDA #3 ; always reset this
STA InTripleCount
DEC InBitCount ;on 9th bit
BNE BitToByte
LDA #1
STA AreWeReceiving
STA InTripleCount
LDA IncomingByte
;STA COLUBK
LDA #2
STA Flag
JMP Again
BitToByte
; ****************************
; check probability of 1'sor 0's in ThreeBit and store on byte
; <function>
; code assumes 1 or 0 placed in D0 of Acc.
LDA ThreeBits
CMP #3
BMI Zero
CMP #4
BEQ Zero
LDA #1
BNE PastZero
Zero
LDA #0
PastZero
; ****************************
CLC
ROR ; sets carry flag if a 1 in D0
ROR IncomingByte
JMP Again
NotReceivingYet
LDA #1
STA InTripleCount
; ****************************
; this routine will see there is a 2/3 probability of 0.
LDA ThreeBits
AND #%00000100
BNE Close ; If we don't have a lead-in zero, don't receive yet
LDA ThreeBits
CMP #3
BMI StartingToReceive
CMP #4
BEQ StartingToReceive
Close JMP Again
; ****************************
StartingToReceive
LDA #9 ; set these only when we have 2/3 probability of
STA InBitCount ; the starter 0.
LDA #0
STA AreWeReceiving
LDA #3
STA InTripleCount
JMP Again
org $FE00
Alphabet
; null1 spc
.byte %01110111
.byte %01000101
.byte %01000101
.byte %01110111
.byte %00010100
.byte %00010100
.byte %01110100
.byte 0
; null2 rub
.byte %01110100
.byte %01010100
.byte %01110100
.byte %01100111
.byte %01110101
.byte %01010101
.byte %01010111
.byte 0
; !
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %00000000
.byte %01000000
.byte %01000000
.byte 0
; .
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %00000000
.byte %01000000
.byte %01000000
.byte 0
; -
.byte %00000000
.byte %00000000
.byte %00000000
.byte %01110000
.byte %00000000
.byte %00000000
.byte %00000000
.byte 0
; ?
.byte %01111110
.byte %01000010
.byte %00000010
.byte %00011110
.byte %00011000
.byte %00000000
.byte %00011000
.byte 0
; A
.byte %01110000
.byte %01010000
.byte %01010000
.byte %01110000
.byte %01010000
.byte %01010000
.byte %01010000
.byte 0
; B
.byte %01110000
.byte %01001000
.byte %01001000
.byte %01110000
.byte %01001000
.byte %01001000
.byte %01110000
.byte 0
; C
.byte %01110000
.byte %01010000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01010000
.byte %01110000
.byte 0
; D
.byte %01110000
.byte %01011000
.byte %01001000
.byte %01001000
.byte %01001000
.byte %01011000
.byte %01110000
.byte 0
; E
.byte %01110000
.byte %01000000
.byte %01000000
.byte %01110000
.byte %01000000
.byte %01000000
.byte %01110000
.byte 0
; F
.byte %01110000
.byte %01000000
.byte %01000000
.byte %01110000
.byte %01000000
.byte %01000000
.byte %01000000
.byte 0
; G
.byte %01111000
.byte %01000000
.byte %01000000
.byte %01011000
.byte %01001000
.byte %01001000
.byte %01111000
.byte 0
; H
.byte %01010000
.byte %01010000
.byte %01010000
.byte %01110000
.byte %01010000
.byte %01010000
.byte %01010000
.byte 0
; I
.byte %01110000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %01110000
.byte 0
; J
.byte %00010000
.byte %00010000
.byte %00010000
.byte %00010000
.byte %01010000
.byte %01010000
.byte %01110000
.byte 0
; K
.byte %01001000
.byte %01001000
.byte %01010000
.byte %01100000
.byte %01010000
.byte %01001000
.byte %01001000
.byte 0
; L
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01000000
.byte %01110000
.byte 0
; M
.byte %01100011
.byte %01110111
.byte %01011101
.byte %01001001
.byte %01000001
.byte %01000001
.byte %01000001
.byte 0
; N
.byte %01000010
.byte %01100010
.byte %01110010
.byte %01011010
.byte %01001110
.byte %01000110
.byte %01000010
.byte 0
; O
.byte %01110000
.byte %01010000
.byte %01010000
.byte %01010000
.byte %01010000
.byte %01010000
.byte %01110000
.byte 0
; P
.byte %01110000
.byte %01010000
.byte %01010000
.byte %01110000
.byte %01000000
.byte %01000000
.byte %01000000
.byte 0
; Q
.byte %01111000
.byte %01001000
.byte %01001000
.byte %01001000
.byte %01011000
.byte %01001000
.byte %01111100
.byte 0
; R
.byte %01110000
.byte %01010000
.byte %01010000
.byte %01110000
.byte %01100000
.byte %01010000
.byte %01010000
.byte 0
; S
.byte %01110000
.byte %01000000
.byte %01000000
.byte %01110000
.byte %00010000
.byte %00010000
.byte %01110000
.byte 0
; T
.byte %01110000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte 0
; U
.byte %01010000
.byte %01010000
.byte %01010000
.byte %01010000
.byte %01010000
.byte %01010000
.byte %01110000
.byte 0
; V
.byte %01010000
.byte %01010000
.byte %01010000
.byte %01010000
.byte %01010000
.byte %00100000
.byte %00100000
.byte 0
; W
.byte %01000001
.byte %01000001
.byte %01000001
.byte %01001001
.byte %01011101
.byte %01110111
.byte %00100010
.byte 0
; X
.byte %01010000
.byte %01010000
.byte %01010000
.byte %00100000
.byte %01010000
.byte %01010000
.byte %01010000
.byte 0
; Y
.byte %01010000
.byte %01010000
.byte %01110000
.byte %00100000
.byte %00100000
.byte %00100000
.byte %00100000
.byte 0
; Z
.byte %01111100
.byte %00000100
.byte %00001000
.byte %00010000
.byte %00100000
.byte %01000000
.byte %01111100
.byte 0
org $FF00
Shifts
.byte 3 ; space
.byte $FF ; rub
.byte 1 ; !
.byte 1 ; .
.byte 3 ; -
.byte 6 ; ?
.byte 3 ; A
.byte 4 ; B
.byte 3 ; C
.byte 4 ; D
.byte 3 ; E
.byte 3 ; F
.byte 4 ; G
.byte 3 ; H
.byte 3 ; I
.byte 3 ; J
.byte 4 ; K
.byte 3 ; L
.byte 7 ; M
.byte 6 ; N
.byte 3 ; O
.byte 3 ; P
.byte 5 ; Q
.byte 3 ; R
.byte 3 ; S
.byte 3 ; T
.byte 3 ; U
.byte 3 ; V
.byte 7 ; W
.byte 3 ; X
.byte 3 ; Y
.byte 5 ; Z
Arrow
.byte %00000000
.byte %00011000
.byte %00111100
.byte %01111110
.byte %11111111
.byte %00011000
.byte %00011000
.byte %00011000
SendWord
.byte %00000000
.byte %11101110
.byte %00101000
.byte %00101000
.byte %11101100
.byte %10001000
.byte %10001000
.byte %11101110
SendWord2
.byte %00000000
.byte %10010010
.byte %10110010
.byte %10110010
.byte %11110010
.byte %11010010
.byte %11010010
.byte %10010111
RecWord
.byte %00000000
.byte %10101110
.byte %10101000
.byte %11001000
.byte %11101100
.byte %10101000
.byte %10101000
.byte %11101110
RecWord2
.byte %00000000
.byte %11100111
.byte %10000101
.byte %10000101
.byte %10000111
.byte %10000001
.byte %10001001
.byte %11101001
; ASCII codes
; A = 65, .... Z = 90
; ? = 63
; Bksp =
; . = 46
; ! = 33
; - = 45
; SP =
ASCIITable
.byte 32 ; space
.byte 8 ; rub
.byte 33 ; !
.byte 46 ; .
.byte 45 ; -
.byte 63 ; ?
.byte 65 ; A
.byte 66 ; B
.byte 67 ; C
.byte 68 ; D
.byte 69 ; E
.byte 70 ; F
.byte 71 ; G
.byte 72 ; H
.byte 73 ; I
.byte 74 ; J
.byte 75 ; K
.byte 76 ; L
.byte 77 ; M
.byte 78 ; N
.byte 79 ; O
.byte 80 ; P
.byte 81 ; Q
.byte 82 ; R
.byte 83 ; S
.byte 84 ; T
.byte 85 ; U
.byte 86 ; V
.byte 87 ; W
.byte 88 ; X
.byte 89 ; Y
.byte 90 ; Z
org $FFFC
.word Start
.word Start
Attachment:
0000.bin
Description: Binary data
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [stella] vcs net play A0?=, Erik Mooney | Thread | Re: [stella] Teleterm 2600, Joe Grand |
| Re: [stella] vcs net play A0?=, Erik Mooney | Date | Re: [stella] 7800 development, Keith Gerdes |
| Month |