..::: CBM 2001/3001 - ROCKET DRIVE :::..
Suche
Index
FAQ
Kontakt
Zurück
         .................................................................................              
                                      -P-R-O-J-E-C-T-
         CBM 2001/3001-
          ________            ______      _____     ________       _____             
          ___  __ ______________  /________  /_    ___  __ _________(_)__   ______ 
          __  /_/ /  __   ___/_  //_/  _   __/    __  / / /_  ___/_  /__ | / /  _ 
          _  _, _// /_/ / /__ _  ,<  /  __/ /_      _  /_/ /_  /   _  / __ |/ //  __/
          /_/ |_| ____/___/ /_/|_| ___/__/      /_____/ /_/    /_/  _____/ ___/ v0.1
         
         .................................................................................
                        __ __ __ __ __ __ __ __ __ __ 
         status :   0% |__|__|__|__|__|__|__|__|__|__| 100%
                              | 
                              25% 
         .................................................................................         
         
         ein neues laufwerk fuer die cbm 2001/3001 (basic 2.0) rechner ist in arbeit. es
         wird (erstmal) ein mit akku gepuffertes 512kb sram als datenspeicher nutzen.
         als verbindung dient der userport des cbm und das herz des virtuellen laufwerks 
         ist ein atmel mega8515l.
         beide prozessoren werden in assembler programmiert, um die hoechst moegliche leistung
         auf beiden seiten zu erreichen. nach ersten tests sind datenraten von knapp 20kb/s
         moeglich.
         letztlich werden ladezeiten unter 3 sekunden fuer jedes programm bis 32kb angestrebt.
         das sollte fuer jeden nutzer im ertraeglichen rahmen liegen. ;)
         
         
        
        prinzip 
         verbindung zwischen avr und userport 
         speicher banking 
         uebertragungs-protokoll          
        
        quelltexte 
         befehls-interpreter                   
         directory formatieren                   
         directory als 512 byte rohdaten zum cbm uebertragen                            
         
         
         update diary 
         
              
         
         
 
         die verbindung zum avr :
         
         pet        avr
        
         pa0..7 <-> porta
         ca1    <-  pb0     (strobe)
         cb2    ->  pb1     (clock)
  
         die restlichen ports des avr werden fuer die beschaltung der zusaetzlichen komponenten 
         verwendet. 
             
         in der ersten version sind 8 baenke a 64kb geplant. jede dieser baenke wird ein directory
         von $0000-$01ff haben. in diesem segment werden 16 eintraege x 32 byte fuer den pet nutzbar
         sein. 
         beim zugriff auf eine bank wird automatisch das directory direkt in den bildschirm-speicher
         geladen. so kann der speicherbedarf auf das notwendigste reduziert und laestiges scrollen 
         gespart werden.
         fuer das abrufen diese bank-directories, von denen es 8 geben wird, muss natuerlich ein file-
         browser programmiert werden. dieser soll in der endgueltigen version als steckbares rom erstellt
         werden.
         geladen wird einfach per hotkey und speichern wird mit auslesen der passenden pointer realisiert.
         
  
         directory-eintrag :
        
         id , dateiname, flag, blocks, (lade-)adresse,( pointer (sram)), ungenutzt 
         $01,    $10   , $01 , $01   , $02 (lo/hi)   ,( $02 (lo/hi)   ),  ($09) $0b     byte(s)
  
 

         banking:
  
  
  
                                512kb sram
                             +----------------+
                         a18 |1 *           32| vcc 
                         a16 |2             31| a15 
                         a14 |3             30| a17
                         a12 |4             29| we 
                          a7 |5             28| a13
                          a6 |6             27| a8
                          a5 |7             26| a9
                          a4 |8             25| a11
                          a3 |9             24| oe
                          a2 |10            23| a10
                          a1 |11            22| ce
                          a0 |12            21| d7
                          d0 |13            20| d6
                          d1 |14            19| d5
                          d2 |15            18| d4
                         gnd |16            17| d3
                             +----------------+
        
        
                               a16  a17  a18   bank
                             ----+----+-----+------ 
                               0    0    0     0
                               1    0    0     1
                               0    1    0     2
                               1    1    0     3                 
                               0    0    1     4
                               1    0    1     5
                               0    1    1     6
                               1    1    1     7         
                               
                                   
         die drei oberen leitungen des sram werden mit pe0-2 des avr gebanked. so sind 8 baenke a 64kb mit
         jeweils 16 eintragen moeglich. gesamt sind das mit einem ram : 128 einzelne dateien.
         der ram-chip wird mit einem kleinen akku gepuffert. so bleiben die daten nach dem ausschalten erhalten.
          
         protokoll:
                
         
         
         empfangen vom avr:
 
         _h__   _____   ______ clock ( gesteuert vom pet)  (cb2)
             |_|     |_|
                 byte     byte <-- vom avr      (pa0..7)
                _        _
         _l____| |______| |___ strobe vom avr   (ca1)
         
         
         
         
         ;-------------------------------------------------------------------------------------------------------         
         
         avr:
         
         .macro protokoll

          poll:                       
               in mp,pinb                           ; poll for clock="0
"               andi mp,2           
               cpi mp,2                     
               breq poll   
               in mp,pinb
               ori mp,1                             ; set strobe
               out portb,mp       
               andi mp,254
               out portb,mp
         .endmacro
             ; send byte
         
         ;-------------------------------------------------------------------------------------------------------
           
           cbm 2001/3001:
           
                       lda clock
                       and #31
                       ora #192
                       sta clock      ; clock  0
                       ora #244
                       sta clock      ; clock  1 
           cstrobe     lda strobe      
                       cmp #64        ; strobe hi ? 
                       beq cstrobe      
 
                       lda buf        ; get byte
         
           
         die clock-phase von cb2 (pet) ist so kurz wie moeglich. danach wird sofort das strobe vom avr abgewartet, damit 
         diese zugegeben sehr gewagte ;) verbindung nicht entgleist.
         der avr schafft das senden des strobe-hi ueber den flakengetriggerten ca1-ausgang und eines bytes auf porta, bevor
         der pet "lda buf" erreichen kann. 
         
          

          ;------------------------------------------------------------------------------
          ; command 
          ;------------------------------------------------------------------------------
          ;
          ;
          ;       $00 : bank directory
          ;       $01 : load  (+ parameter)
          ;       $02 : save  (+ parameter)
          ;       $03 : status 
          ;       $04 : validate  
          ;       $05 : format bank
          ;
          ;
          ;  workstage : 19.8.2007
          ;
          
          
          command:
                  ldi count,0
                  ldi mp,0
                  out ddra,mp                          ; receive from cbm
                  ldi r30, low(sram*2)                 ; sram zeiger
                  ldi r31, high(sram*2)                ; ist $60         
          pol1:
                  in mp,pinb                           ; poll for clock="0
"                  andi mp,2           
                  cpi mp,2                     
                  breq pol1
                   in mp,pinb                          ; set strobe
                  ori mp,1                             
                  out portb,mp       
                  andi mp,254
                  out portb,mp
                  in r16,pina                          ; port a in sram
                  st z+,r16      
                  inc count      
                  cpi count,32                         ; 32 bytes in sram
                  brne pol1
                  
           
          ;------------------------------------------------------------------------------ 
           
                
                  
                  ldi r30, low(sram*2)                  ; sram zeiger
                  ldi r31, high(sram*2)                 ; ist $60               
                  ld r16,z+       
                  cpi r16,5     
                  breq format                           ; $05 : bank format
                  cpi r16,0                    
                  breq directory                        ; $00 : bank directory   
                  rjmp ...  
           
          ;------------------------------------------------------------------------------  






          
         ;-------------------------------------------------------------------------------------------------------        
        
          routine zum formatieren eines directories
          
         ;--------------------------------------------------------------------------------------------------------
 
 
         ; format bank : 16 x 32 bytes="512" bytes (0,5 kb)
         ; id $01 , filename $10 (fill: $20), flag $01 ($00 del /$01 prg), blocks ($01) ,loadaddr. $02,  fillbytes $0b (fill : $ff)
         ;pb2: /ce
         ;pb4: /we

         . macro formatbank
         
                  ldi mp,255
                  out ddrc,mp                        ; portc : address-register      
                  out ddrd,mp                        ; portd : data-port
          
          
                  ldi count,0                        ; cycle counter
                  ldi ladr,0                         ; sram: low-address 
                  ldi hadr,0                         ; sram: hi-address
          ne:
                  ldi r30, low(fbytes *2 )           ; low-byte in z    ; set pointers to fillbytes
                  ldi r31, high(fbytes *2)           ; high-byte in z           
                  lpm senden, z+ ;                   ; fetch datas for portd 
          redo:
                  out portc,hadr                     ; set address port
                  in mp,pinb                         ; flip latch clock from 0 to 1 to 0 ( a8 - a15 )
                  ori mp,0b00001000
                  out portb,mp
                  andi mp,0b11110111                 
                  out portb,mp
                  out portc,ladr                     ; address a0-a7
                  out portd,senden   
                  in mp,pinb                         ; set sram /we:0 /ce:0 : write
                  andi mp,0b11101011
                  out portb,mp
                  ori mp,0b11110100                  ; and flip back to tristate  /we:1 /ce:1
                  out portb,mp
                  inc ladr                           
                  brne goon   
                  inc hadr                           ; time to inc the hi-address (set a8)
          goon:     
                  lpm senden, z+ ;                   ; fetch datas for portd 
                  cpi senden,$0a
                  brne redo                       
                  inc count                          ; 16 cycles
                  cpi count,16
                  brne ne

          .endmacro        


fbytes: .db $00,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$00,$00,$00,$00,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$0a,$00
        
          
         ;-------------------------------------------------------------------------------------------------------
           directory als 512 byte rohdaten zum cbm uebertragen
         ;-------------------------------------------------------------------------------------------------------

          .macro bank_dir
          
                  
                  ldi mp,255
                  out ddra,mp
                  ldi ladr,0                         ; sram: low-address 
                  ldi hadr,0                         ; sram: hi-address
                  ldi mp,0
                  out ddrd,mp                        ; ddrd: sram data for input 
          m5:

                  out portc,hadr
                  in mp,pinb                         ; flip latch clock from 0 to 1 to 0 ( a8 - a15 )
                  ori mp,0b00001000
                  out portb,mp
                  out portc,ladr                     ; address a0-a7
                  in mp,pinb                         ; set sram /we:1 /ce:0
                  andi mp,0b11111011
                  out portb,mp                       
                  in senden, pind                    ; get byte from sram      
                  ori mp,0b11110100                  ; and flip back to tristate  /we:1 /ce:1
                  out portb,mp
                  inc ladr
                  brne m4
                  inc hadr
          m4:
                  protokoll
                  out porta,senden
                  brne m5
                  cpi hadr,2
                  brne m5
          
          .endmacro

         ;-------------------------------------------------------------------------------------------------------
                           
         zukunfts-musik, lose gedanken, spinnerei ... :
         
         
         1. die bauteile sind sehr stromsparende varianten, d.h. man koennte 3 mignon-zellen als stromversorgung verwenden.
         2. ein adapter fuer den druckerport des pc + software
         3. verwendung an der cbm 8000-reihe   
        
         jemand noch weitere ideen ?
         
         
         der aktuelle prototypen schaltplan : nicht endgueltige version ! (24.8.2007)
         
         
        

Letzte Änderung: 2016-12-13 14:05:12
  Rubrik:  DIY : Do it yourself
Rubriken-Übersicht
 5 Besucher online 

Valid XHTML 1.0 Transitional Valid CSS!