letzter Beitrag von pcollins am
-
-
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.
Code- 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
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....
Code- /*
- 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
-
.... hat sich erledigt.
-
-
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 : http://lallafa.de/blog/2013/11/networking-on-the-minimig-wi
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...