User Tools

Site Tools


base:reu_detect

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

base:reu_detect [2015-04-17 04:33] (current)
Line 1: Line 1:
 +====== REU Detect ======
 +<code>
 +;--------------------------------------------------------------------------------------------------------------------
 +; REUDETECT v1.0a ( REU : 1700, 1764, 1750, 1024Kb and 2048Kb )
 +; ---------------------------------------------------------------------------------------------------------------------
 +; Overview : Detection of REC and RAM-Type : 0 = 1700 (64Kbx1) or 16 = 1764/50 or bigger(256Kbx1).
 +;            Write to Registers 2-5 and compare.
 +;            Write 33 banks with "messy datas".
 +;            Fetch bank, inc bank-counter (banks $1500) if own dummy-bytes not found.  
 +;            Stash bank, write own dummy bytes for later comparing and fetch next bank.           
 +;            Skip bankcheck if dummy byte-chain found. Detection is finished.                
 +;            Read available banks, evaluate and drop some text on the screen.  
 +; ---------------------------------------------------------------------------------------------------------------------  
 +; 21. Januar 2005 M. Sachse (cbmhardware/People of Liberty)
 +
 +; E-Mail : info(at)cbmhardware.de
 +;
 +; 22. Januar 2005 : Bugfix, add ram-type detection 1764, Vice and C64 compatibility, messy code reworked;   
 +;                    
 +; ------------------------------------------------------------------------------------------------------------------
 +; GPL
 +;
 +; This program is free software; you can redistribute it and/or modify it under the terms of the 
 +; GNU General Public License as published by the Free Software Foundation; either version 2 of the
 +; License, or (at your option) any later version. 
 +;
 +;---------------------------------------------------------------------------------------------------------------------
 +; Source Code for ACME Cross-Assembler :
 +;---------------------------------------------------------------------------------------------------------------------
 +!to "reudetect.prg"
  
 +*= $0800
 +
 +!byte $00,$0c,$08,$0a,$00,$9e,$32,$30,$36,$32,$00,$00,$00,$00
 +
 +*= $080e
 +
 +reubase      = $df00
 +reucommand   = $df01
 +banks        = $1500     ; to store found banks and count
 +
 +
 +;--------------------------------------------------
 +; Detect REU 1700,1764/50 or 1/2MB
 +;--------------------------------------------------
 +reudetect    lda #1           
 +             sta $0286            ; textcolor white
 +             lda #00
 +             sta $d020
 +             sta $d021
 +             sta banks
 +             sta reubase
 +             cmp reubase
 +             beq noreu       
 +             bne unsafe
 +unsafe       lda reubase
 +             and #16          ; check bit 4 for REU mem
 +             cmp #16          ; 16 = 256Kbx1 
 +             beq regcheck     ; yes, touch registers
 +             bne l1           ; no, 1700 ?
 +l1           lda reubase
 +             and #16          ; check bit 4 for REU mem
 +             cmp #0
 +             beq r1700        ; reu 1700 found
 +             bne noreu        ; no ram-type, no reu, no fun ...
 +regcheck     lda reubase
 +             ldx #2
 +loop1        txa
 +             sta $df00,     ; write to registers 2-5                                         
 +             inx
 +             cpx #5
 +             bne loop1
 +             ldx #02 
 +loop2        txa 
 +             cmp $df00,            
 +             bne noreu 
 +             inx
 +             cpx #5
 +             bne loop2
 +             jmp rinit
 +r1700        lda #<reutext
 +             ldy #>reutext              
 +             jmp $ab1e
 +;-------------------------------------------------
 +rinit        ldx #00          ; 1764 wake up
 +rinit2       lda #128         ; stash 
 +             sta config
 +             lda #$12         ; write some crap in ... 
 +             sta c64hi+1
 +             stx bank+1
 +             jsr main         
 +             inx
 +             cpx #33          ;  ... 33 banks into somewhere
 +             bne rinit2
 +             jmp action
 +noreu        lda #<notext
 +             ldy #>notext              
 +             jmp $ab1e
 +;--------------------------------------------------
 +; Count banks 
 +;--------------------------------------------------
 +action       lda reubase
 +             ldx #$00
 +             stx bank+1       ; reset bank counter
 +check        lda #129         ; fetch : transfer to C64 : $1300 
 +             sta config        
 +             lda #$13         ; C64 : $1300 
 +             sta c64hi+1 
 +             jsr main 
 +             lda #128         ; stash 
 +             sta config
 +             lda #$0A         ; write dummy bytes from $0900 
 +             sta c64hi+1
 +             jsr main         
 +             jsr bankcheck    ; check for existing ram banks
 +             inx 
 +             cpx #33          ; try 33 
 +             stx bank+1
 +             bne check
 +;--------------------------------------------------
 +             lda #0           ; restore bordercolor 
 +             sta $d020 
 +             lda banks        ; banks found ? 
 +             cmp #4
 +             beq r1764        
 +             bne j1
 +r1764        lda #4
 +             sta banks 
 +             lda #<text1764
 +             ldy #>text1764              
 +             jmp $ab1e
 +j1           cmp #8
 +             beq r512
 +             bne j2 
 +r512         lda #<reut512
 +             ldy #>reut512              
 +             jmp $ab1e
 +j2           cmp #16
 +             beq r1024
 +             bne j3     
 +r1024        lda #<reut1024
 +             ldy #>reut1024              
 +             jmp $ab1e
 +j3           cmp #20
 +             beq r1764
 +             bne j4
 +j4           cmp #32
 +             beq r2048
 +             bne j6 
 +r2048        lda #<reut2048
 +             ldy #>reut2048              
 +             jmp $ab1e
 +j6           lda #<reuunk
 +             ldy #>reuunk              
 +             jmp $ab1e
 +;--------------------------------------------------
 +; Bank Check
 +;--------------------------------------------------
 +bankcheck    ldy #$00       
 +l2           lda $0A00,y
 +l6           cmp $1300,            
 +             bne l4            ; bank found ? 
 +             beq l3            ; no, check 16 Bytes 
 +l3           iny            
 +             cpy #16 
 +             bne l2            ; loop  
 +end          ldy #00
 +             lda #00
 +delete       sta $1300,      ; delete buffer
 +             iny
 +             cpy #16
 +             bne delete        
 +             rts
 +l4           jmp l5 
 +l5           inc banks         ; bank found (inc), border color change and exit
 +             inc $d020 
 +             rts
 +config !byte 252
 +;--------------------------------------------------
 +; Bytes and text
 +;--------------------------------------------------
 +*=$0A00 
 +
 +!scr "---C64-RULEZ!---"         ;  ;-)
 +                     
 +reutext:  !text "REU 1700 : 128KB DETECTED",0
 +text1764: !text "REU 1764 : 256KB DETECTED",0
 +reut512:  !text "REU 1750 : 512KB DETECTED",0
 +reut1024: !text "REU 1024KB DETECTED",0
 +reut2048: !text "REU 2048KB DETECTED",0
 +reuunk:   !text "REU PORT DETECTED - BANK ERROR",0
 +notext:   !text "NO REU",0
 +
 +;--------------------------------------------------
 +; REU TRANSFER ROUTINE
 +;--------------------------------------------------
 +
 +main      
 +           lda config
 +           sta reubase+1 
 +           lda #$00
 +           sta reubase+2
 +c64hi      lda #$09             
 +           sta reubase+3
 +           lda #$00
 +           sta reubase+4
 +           sta reubase+5
 +bank       lda #0
 +           sta reubase+6      ; Bank
 +rbytes     lda #16  
 +           sta reubase+7      ; 16 Bytes
 +           lda #$00
 +           sta reubase+8
 +irq        lda #$00
 +           sta reubase+9
 +           lda #$00
 +           sta reubase+10 
 +           lda $1
 +           pha
 +           lda #$30           ; RAM
 +           sei
 +           sta $1
 +           sta $ff00                   
 +           pla
 +           sta $1
 +           cli
 +           rts
 +</code>
base/reu_detect.txt ยท Last modified: 2015-04-17 04:33 (external edit)