Sicher ?
Bitte melde dich an, um diesen Link zu sehen.
Es gibt 52 Antworten in diesem Thema, welches 15.865 mal aufgerufen wurde. Der letzte Beitrag (
Sicher ?
Bitte melde dich an, um diesen Link zu sehen.
Nochmal zum eigentlichen Thema, da ein RR-Net ja keine RS232-Lösung ist ![]()
Gestern Abend habe ich mich noch einmal an den Silversurfer Treiber Code gesetzt. Leider nicht wirklich erfolgreich.
Das BBS versucht ein "ATZ" zu senden, es kommt aber kein "OK" zurück. Stattdessen wechselt nur die DTR Leitung von Low nach High und es geht nicht weiter.
Hier ist wirklich Hilfe nötig. Im Forum sind ja eigentlich 2 Leute die dafür prädestiniert wären zu unterstützen....
Wow wie schnell ein halbes Jahr doch vergeht. Nachdem die C*BASE Projekte jetzt erst mal weitgehend erledigt sind, hatte ich mal wieder Zeit und Lust am Treiber für die Silversurfer Card für C*BASE zu coden.
Aktueller Stand ist:
- C*BASE, das Bootfile und C-Term stürzen mit dem Treiber nicht mehr ab. Das Problem hatte ich, nachdem ich quasi wieder von vorne angefangen habe
- TCPSER erhält inzwischen ein "ATZ" vom BBS. TCPSER sendet dann ein "OK" zurück, welches aber vom Treiber nicht richtig verwurstet wird.
2020-02-15 18:44:57:140383946135296:DEBUG_X:CMD:1, DCE:1, LINE:0, TYPE:0, HOOK:0
2020-02-15 18:44:59:140383946135296:DEBUG:Data available on serial port
2020-02-15 18:44:59:140383946135296:DEBUG:Read 1 raw byte from serial port
2020-02-15 18:44:59:140383946135296:DEBUG_X:'A' parsed in serial stream
2020-02-15 18:44:59:140383946135296:DEBUG_X:Waiting for modem/control line/timer/socket activity
2020-02-15 18:44:59:140383946135296:DEBUG_X:CMD:1, DCE:1, LINE:0, TYPE:0, HOOK:0
2020-02-15 18:44:59:140383946135296:DEBUG:Data available on serial port
2020-02-15 18:44:59:140383946135296:DEBUG:Read 1 raw byte from serial port
2020-02-15 18:44:59:140383946135296:DEBUG_X:'T' parsed in serial stream, switching to command parse mode
2020-02-15 18:44:59:140383946135296:DEBUG_X:Waiting for modem/control line/timer/socket activity
2020-02-15 18:44:59:140383946135296:DEBUG_X:CMD:1, DCE:1, LINE:0, TYPE:0, HOOK:0
2020-02-15 18:44:59:140383946135296:DEBUG:Data available on serial port
2020-02-15 18:44:59:140383946135296:DEBUG:Read 1 raw byte from serial port
2020-02-15 18:44:59:140383946135296:DEBUG_X:Waiting for modem/control line/timer/socket activity
2020-02-15 18:44:59:140383946135296:DEBUG_X:CMD:1, DCE:1, LINE:0, TYPE:0, HOOK:0
2020-02-15 18:44:59:140383946135296:DEBUG:Data available on serial port
2020-02-15 18:44:59:140383946135296:DEBUG:Read 1 raw byte from serial port
2020-02-15 18:44:59:140383946135296:ENTER_EXIT:Entering mdm_parse_cmd function
2020-02-15 18:44:59:140383946135296:DEBUG:Evaluating ATH
2020-02-15 18:44:59:140383946135296:DEBUG:Command: H (72), Flags: 0, index=1, num=0, data=0-0
2020-02-15 18:44:59:140383946135296:ENTER_EXIT:Entering mdm_disconnect function
2020-02-15 18:44:59:140383946135296:INFO:Disconnecting modem
2020-02-15 18:44:59:140383946135296:INFO:Disconnecting line
2020-02-15 18:44:59:140383946135296:INFO:Control Lines: DSR:1 DCD:0 CTS:1
2020-02-15 18:44:59:140383946135296:ENTER_EXIT:Entering dce_set_control_lines function
2020-02-15 18:44:59:140383946135296:DEBUG_X:Setting CTS pin high
2020-02-15 18:44:59:140383946135296:DEBUG_X:Setting DCD pin low
2020-02-15 18:44:59:140383946135296:ENTER_EXIT:Exitting dce_set_control_lines function
2020-02-15 18:44:59:140383946135296:DEBUG:Sending OK response to modem
2020-02-15 18:44:59:140383946135296:DEBUG_X:Sending text response
2020-02-15 18:44:59:140383946135296:ENTER_EXIT:Exitting mdm_disconnect function
2020-02-15 18:44:59:140383946135296:DEBUG:Command: (-1), Flags: -1, index=1, num=0, data=0-0
2020-02-15 18:44:59:140383946135296:DEBUG:Sending OK response to modem
2020-02-15 18:44:59:140383946135296:DEBUG_X:Sending text response
2020-02-15 18:44:59:140383946135296:DEBUG_X:Waiting for modem/control line/timer/socket activity
Alles anzeigen
D.h. die Empfangsseite des Treibers läuft noch nicht. ich fummel da jetzt schon die letzten 4 Abende dran rum, aber bekomme das nicht ans laufen.
Deshalb hier nochmal (m)ein Aufruf an alle, die sich mit RS232, Hart Modem und oder Silversurfer etwas auskennen, da mal rein zu schauen. Evtl. sehe ich ja den Wald vor lauter Bäumen nicht....
/*
NMI.ML Modem Driver for SilverSurfer Card (on a Turbo Chameleon64)
for C*BASE 3.1 Holy Moses Mod
by Larry / ROLE
2020-02-15
V 0.3
*/
* = $cc00 "nmi.ml silversurfer"
.var rs16550base = $de08
.var fifo_rxd = rs16550base+$00 //8 (r) Receive/
.var fifo_txd = rs16550base+$00 //8 (w) Transmit Buffer
.var fifo_dll = rs16550base+$00 //8 (r/w) Baud Rate Divisor LSB if bit 7 of LCR is set
.var fifo_dlm = rs16550base+$01 //9 (r/w) Baud Rate Divisor MSB if bit 7 of LCR is set
.var fifo_ier = rs16550base+$01 //9 Interrupt Enable Register
.var fifo_fcr = rs16550base+$02 //a (w) FIFO Control Register
.var fifo_iir = rs16550base+$02 //a (r) Interrupt Identification Register
.var fifo_lcr = rs16550base+$03 //b Line Control Register
.var fifo_mcr = rs16550base+$04 //c Modem Control Register
.var fifo_lsr = rs16550base+$05 //d Line Status Register
.var fifo_msr = rs16550base+$06 //e (r) Modem Status Register
.var fifo_scratch = rs16550base+$07 //f (r/w) Scratch Pad Register
// C*BASE NMI.ML Jumptable
// cc00 nmion
// cc03 chkcarr
// cc06 dtroff
// cc09 dtron
// cc0c to modem
// cc0f stop232
jmp _ss_nmion
jmp _chkcarr
jmp _dtroff
jmp _dtron
jmp _ss_putchr
_stop232: lda fifo_lsr // $de0d
and #%00100000 // #20 check if transmit register empty
beq _stop232
lda #%00000000 // #0 disable nmi's from ssurfer
sta fifo_ier // $de09
rts
//---------------------------------------------------------------------
//defaddr: // base address of device
//.byte $08, $de
//maxbaud: // maximum baud rate possible w/ device
//.byte $09
//putrecvec: // vector after returning from storing
//.byte $52, $7d
tempdtr: // Temp Storage for DTR Status/ MCR
.byte $00
init:
.byte $00 // SSurfer already inited flag
/*
- Baud rate divisors can be calculated by taking the oscillating
frequency (7,372,800) and dividing by the quantity of the desired
baud rate times the UART clocking factor (16). Use the following
formula:
divisor = 7372800 / (BaudRate * 16);
- it is not recommended to use zero as divisor.
Baud Rate Divisor Baud Rate Divisor
1 4800 96 $0060
15 9600 48 $0030
75 19200 24 $0018
50 9216 38400 12 $000c
150 3072 57600 8 $0008
300 1536 115200 4 $0004
600 768 153600 3 $0003
1200 384 230400 2 $0002
1800 256 $0100 460800 1 $0001
2400 192 $00c0
*/
_bauds: // baudrate divisor LSB
.byte $c0 // #192 2400 x-Reg:0
//.byte $60 // #96 4800
.byte $30 // #48 9600 x-Reg:1
.byte $18 // #24 19200 x-Reg:2
.byte $0c // #12 38400 x-Reg:3
.byte $08 // #8 57600 x-Reg:4
.byte $04 // #4 115200 x-Reg:5
.byte $02 // #2 230400 x-Reg:6
//.byte $01 // #1 460800
// Baudratedevisor MSB
_baudsmsb:
.byte $06
//.byte $03
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00
//.byte $00
_ss_nmion: pha // save accu
txa // and x-reg
pha // on stack
lda $de01 //
ora #$01 // enable ssurfer-port
sta $de01 //
lda #%10000111 // #$87 Enable RCVR FIFO IRQ and clear Registers
sta fifo_fcr // $de0a
// lda #$83 // retrosurf value %1000 0011 (Bit 0+1 =8 bits per Char(8N1))
lda #$03 // %0000 0011 (Bit7:1=Baudrate devisor latch / 0=RBR, THR or IER)
sta fifo_lcr // reset dlab $de0b
lda #%00000111 // #$07
sta fifo_mcr // $de0c DTR, RTS, OUT1
lda #$00 //
sta fifo_fcr // $de0a
lda #$01 // INTON
sta fifo_ier // enable data available interrupt (and 16550 Timeout)
lda $de0b
cmp #$03
bne _stnmi
lda $de0c
cmp #$07
bne _stnmi
jmp _cc73
_stnmi: jsr _setnmi // set NMI Vector
jsr _setvectors // set other Vectors
_bullshit: lda #$00
sta $029c // RS232 Recv Buffer
sta $029b // start and end
/*
//jmp _bullshit
_bullshit: lda #$00
sta $029c // RS232 Recv Buffer
sta $029b // start and end
/* lda $0293 // 6551 Control Reg. #659
and #%00001111 // #$0f
cmp #$0a
bne _chk9600
lda #$00 //2400
jmp _setbaud
_chk9600: cmp #$0e
bne _chk19200
lda #$01 //9600
jmp _setbaud
_chk19200: cmp #$0f
bne _chk38400
lda #$02 //19200
jmp _setbaud
_chk38400: cmp #$13
bne _chk57600
lda #$03 //38400
jmp _setbaud
_chk57600: cmp #$10
bne _chk115200
*/
lda #$04 //57600
jsr _setbaud
//_chk115200: cmp #$12
// bne _chk230400
// lda #$05 //115200
// jmp _setbaud
//_chk230400: lda #$06 //230400
/* set baud rate
.A = baud rate, according to the following -
0=2400 1=9600 2=19200 3=38400 4=57600 5=115200 6=230400
300, 1200, 4800, 460800 not yet implemented
*/
_cc73: pla
tax
pla
rts
//---------------------------------------------------------------------
// praktisch identisch mit retrosurf
_setbaud:
tax
lda _bauds,x // get LSB of Baudrate devisor
pha // save on Stack
lda fifo_lcr // $de0b
ora #$80 // set Bit 7 of $de0b LCR to
sta fifo_lcr // make $de08 and $de09 LSB + MSB of Baudrate divisor
pla // get LSB back from Stack
sta fifo_dll // and set LSB
lda _baudsmsb,x // get MSB
sta fifo_dlm // and set Baudrate divisor MSB $de09
lda fifo_lcr // $de0b reset dlab
lda #%00000011 // reset dlab
// and #$7f //
sta fifo_lcr // to make $de08 and $de09 RXD / TXD Buffer
// lda #$00 // disable nmi's
// sta fifo_ier // from ssurfer
// sta tempdtr // tempdtr
rts
//---------------------------------------------------------------------
// praktisch identisch mit retrosurf und nmi.ml
_setnmi: lda #<_surfernmi // set new NMI Vector
ldy #>_surfernmi
sta $0318
sty $0319
rts
//---------------------------------------------------------------------
_surfernmi: pha // save a, x, y Reg
txa // on Stack
pha //
tya //
pha //
lda fifo_lsr // Line Status:
and #$00000001 // Data avail ?
beq _nodata // no
lda fifo_iir // read $de0a
and #%00000100 // %0000 100 FIFO-IIR Data available Interrupt
bne _ssgetbyte // yes
_nodata: pla // get y and x Reg
tay // back from stack
pla //
tax //
pla // get accu back from stack
jmp ($03c7) // Jump to regular NMI
//---------------------------------------------------------------------
_ssgetbyte: lda fifo_rxd // $de08 datareg
ldy $029b // Pointer to end of Recv Buffer
iny
cpy $029c
beq _nodata
dey
sta ($f7),y // ringbuffer
inc $029b
jmp _nodata
/*
_ssgb: pla // get y and x Reg
tay // back from stack
pla //
tax //
pla // get accu back from stack
rti //
*/
//---------------------------------------------------------------------
_ss_putchr: pha
_ss_putchr2: jsr xmitwait
pla // send byte
sta fifo_txd
clc
rts
//---------------------------------------------------------------------
// wait for transmitter to clear
xmitwait: lda fifo_lsr // rd_linestat $de0d
and #%00100000 // #$20 transmitter holding register empty (THRE)
beq xmitwait // waitloop
mdmstat: lda fifo_msr // rd_modemstat $de0e
and #%00110000 // #$30 DSR + CTS HI
cmp #%00100000 // #$20 only if DSR is high
beq mdmstat // loop
pha
lda #$7f
sta $dd0d // disable all NMIs
lda #$ff // set
sta $dd04 // CIA Latch Timer LO on CIA2
lda #$f0
sta $dd05 // CIA Timer HI on CIA2
lda #$30 // %00110000
sta $dd0e // Timer A
lda #$09 // %00001001
sta $dd0e
pla
rts
//---------------------------------------------------------------------
//new CHROUT
newchrout:
pha // save accu on stack
lda $9a // #154 current Output device
cmp #$02 // Kernal RS232 ?!
beq _ss_putchr2// yes
pla // no, get accu back from stack
jmp ($03c3) // jump to regular chrout
//---------------------------------------------------------------------
// new CHKIN
newchkin: stx $97 // XSAV
jsr $f30f // searches logical File (Number in X)
bne ioerror
jsr $f31f // set File-Parameter
lda $ba // current Device#
cmp #$06 //
bcc nodrive // < 6? -> Modem = Dev#5
ldx #$00 // check this if OK !!
stx fifo_mcr // cmdreg receiver irq disabled
jmp todrive
nodrive:
// ldx tempdtr // tempdtr
// stx fifo_mcr
todrive: ldx $97 // get old X-Reg value
jmp ($03c5) // #965
//---------------------------------------------------------------------
ioerror: jmp $f701 // Output Error Message: "FILE NOT OPEN"
//---------------------------------------------------------------------
// new CHKOUT
newchkout:
stx $97 // XSAV
jsr $f30f // searches logical File (Number in X)
bne ioerror
jsr $f31f // Set File Parameter
lda $ba // current Device#
cmp #$06 //
bcc nodrive2 // < 6 ? -> Modem = Dev#5
ldx #$00 // check this if OK !!!
stx fifo_mcr // receiver irq disabled
jmp todrive2
nodrive2:
// ldx tempdtr // tempdtr
// stx fifo_mcr
todrive2: ldx $97 // get old X-Reg value
nchkojmp: jmp $ffff // CHKOUT JMP set by NMIon Setvectors Routine
//---------------------------------------------------------------------
// new CLRCHN
newclrchn:
pha // save accu on stack
// lda tempdtr // tempdtr
// sta fifo_mcr
pla // pull old accu from stack
nclrchnjmp: jmp $ffff // JMP set by NMIon Routine
//---------------------------------------------------------------------
_setvectors: lda init
bne setvecexit // init already done on prev. call
lda #<newchrout
ldy #>newchrout
sta $0326
sty $0327 // set Vector CHROUT Routine
lda $03c1 // Origial CHRIN Vector backup (from Boot)
ldy $03c2 //
sta $0324 // reset to Kernal CHRIN Vector
sty $0325 //
// lda $031f // CHKIN Vector Lowbyte
// cmp #>newchkin // original $f20e
// beq setvecexit // exit if already set
lda #<newchkin
ldy #>newchkin
sta $031e // set new CHKIN Vector
sty $031f //
lda $0320 // CHKOUT Vector
ldy $0321 // Original $f250
// lda #$50
// ldy #$f2
sta nchkojmp+1 // save as Jump Adress
sty nchkojmp+2 //
lda #<newchkout
ldy #>newchkout
sta $0320 // set new CHKOUT Vector
sty $0321 //
lda $0322 // CLRCHN Vector
ldy $0323 //
sta nclrchnjmp+1 // save as Jump Adress
sty nclrchnjmp+2
lda #<newclrchn
ldy #>newclrchn
sta $0322 // set new CLRCHN Vector
sty $0323
inc init // set Init Flag
setvecexit: rts
//---------------------------------------------------------------------
// Check Carrier
_chkcarr: lda fifo_msr // Modem Status Register $de0e
ror // Bit7 = SSurfer_Carrier detect
ror // ror down to Bit 4 (to be compliant with UP Routine in ML 2.o $c82f)
ror // check if jump to $c84a would make sense here. Rest of the code is identical
and #%00010000 // $10 #16 Carrier detect
cmp $0313 // #787 BBS Carriertyp 0 normal / 16 inverted
bne _nocarr // no Carrier
lda #$01 // set
.byte $2c
_nocarr: lda #$00 // clear
sta $fb // #251 BBS Carrier Flag
rts // and return
//---------------------------------------------------------------------
_dtroff: lda fifo_mcr // drop DTR Line $de0c
and #%11111110 // #$fe set Bit 0 off DTR Line
sta fifo_mcr
rts
//---------------------------------------------------------------------
_dtron: lda fifo_mcr // $de0c
ora #%00000001 // set DTR Line Hi
sta fifo_mcr
rts
Alles anzeigen
.... hat sich erledigt.
Moin Larry ,
gibt es was Neues zu dem Thema zu berichten?
Also Cbase läuft wunderbar mit Silversurfer.
Wäre es nicht theoretisch dann auch möglich beim Minimig Core ein wifimodem oder Plipbox zu betreiben ?
Passt das silversurfer komplett in das Gehäuse ?
edit : passt das Chameleon noch in den C64 wenn silversurver verbaut ist, oder wird es nur standallone betrieben ?
Passt das silversurfer komplett in das Gehäuse ?
Beim V1 -> Ja, der Gehäusedeckel muss bearbeitet werden, d.h. das überflüssige Plastikteil in der Mitte, wo theoretisch eine Schraube von unten reingedreht werden kann, muss entfernt werden. Gehäuse ist geclipst, und hält perfekt zusammen.
V2 keine Ahnung, da das anders aufgebaut sein soll. Ggf. könnte pcollins etwas zu sagen. Zur Not braucht man ein Extension Cable für den Clockport
passt Chameleon noch in den C64 wenn silversurver verbaut ist,
Auch ja, passt ohne Probleme beim V1. Wird beim V2 genau so sein.
Danke erstmal für die Info. Das klingt schonmal Klasse. Die kleinen Modifikationen am Gehäuse sollten nicht das Problem sein.
Jetzt bleibt nur die Frage, ob der Minimig Core den SIlversurfer erkennt.
Soooo,
ich Deppo hätte ja einfach mal ins Sysinfo schauen können
....der Clockport wird im Core so einfach nicht erkannt.
Somit hat sich mein kleiner Plan erledigt vorerst ![]()
Somit hat sich mein kleiner Plan erledigt vorerst
ja, ich hatte auch die Idee damit ein wenig DFUE machen zu wollen, schade eigentlich.
Der hier hatte es ja geschafft : Bitte melde dich an, um diesen Link zu sehen.
So wie ich das verstanden habe allerdings mit einem alten modifizierten Core .
Ja, kenne ich....
Und die Baudrate ist auch eher minimal.
Also wirklich keine richtige Lösung...