User Tools

Site Tools


base:reu_detect

Differences

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

Link to this comparison view

Last revisionBoth sides next revision
base:reu_detect [2015-04-17 04:33] – created - external edit 127.0.0.1base:reu_detect [2023-10-26 20:21] groepaz
Line 1: Line 1:
 ====== REU Detect ====== ====== REU Detect ======
 <code> <code>
-;-------------------------------------------------------------------------------------------------------------------- +;ACME 0.97 
-; REUDETECT v1.0a ( REU : 1700, 1764, 1750, 1024Kb and 2048Kb ) +  
-; --------------------------------------------------------------------------------------------------------------------- +!addr   reu_command     $df01 
-; Overview : Detection of REC and RAM-Type : 0 1700 (64Kbx1) or 16 1764/50 or bigger(256Kbx1). +    REUCOMMAND_STASH    = $90   immediatelyno reload 
-;            Write to Registers 2-5 and compare. +    REUCOMMAND_FETCH    = $91   ; immediatelyno reload 
-;            Write 33 banks with "messy datas"+!addr { 
-;            Fetch bank, inc bank-counter (banks $1500) if own dummy-bytes not found.   +    reu_c64addr_lo      = $df02 
-           Stash bankwrite own dummy bytes for later comparing and fetch next bank.            +    reu_c64addr_hi      = $df03 
-;            Skip bankcheck if dummy byte-chain found. Detection is finished.                 +    reu_extaddr_lo      = $df04 
-;            Read available banks, evaluate and drop some text on the screen.   +    reu_extaddr_hi      = $df05 
-; ---------------------------------------------------------------------------------------------------------------------   +    reu_extaddr_bank    = $df06 
-; 21. Januar 2005 M. Sachse (cbmhardware/People of Liberty) +    reu_len_lo      = $df07 
-;  +    reu_len_hi      = $df08 
-; E-Mail : info(at)cbmhardware.de +} 
-+  
-; 22. Januar 2005 : Bugfix, add ram-type detection 1764, Vice and C64 compatibility, messy code reworked;    +detect_capacity ; returns A = number of RAM banks found in REU (Carry set means 2560 means NO REU) 
-                    +        ldx #0  pre-init 
-; ------------------------------------------------------------------------------------------------------------------ +        ; first write signatures to banks in *descending* order (banks 255..0): 
-; GPL +----            dex 
-+            stx banknum 
-; This program is free software; you can redistribute it and/or modify it under the terms of the  +            lda #<signature_start 
-; GNU General Public License as published by the Free Software Foundation; either version 2 of the +            ldx #>signature_start 
-; Licenseor (at your option) any later version.  +            ldy #REUCOMMAND_STASH 
-+            jsr set_registers_AXY 
-;--------------------------------------------------------------------------------------------------------------------- +            ; all banks written? 
-; Source Code for ACME Cross-Assembler : +            ldx banknum 
-;--------------------------------------------------------------------------------------------------------------------- +            bne ---- 
-!to "reudetect.prg" +        ; now check signatures in *ascending* order: 
- +(checking signatures could be shortened by using the REC's "verify" command, 
-*= $0800 +but I'm reluctant to use this function in a "REU detect" routine: it could 
- +be buggy in modern FPGA implementations because it is so seldomly used) 
-!byte $00,$0c,$08,$0a,$00,$9e,$32,$30,$36,$32,$00,$00,$00,$00 +        ; banknum just became zero so no need to init it 
- +----            lda #<sig_candidate_start 
-*= $080e +            ldx #>sig_candidate_start 
- +            ldy #REUCOMMAND_FETCH 
-reubase      = $df00 +            jsr set_registers_AXY 
-reucommand   = $df01 +            compare data 
-banks        = $1500     ; to store found banks and count +            ldx #SIGNATURE_LENGTH_LOW - 
- +--              lda sig_candidate_start, x 
- +                cmp signature_start, x 
-;-------------------------------------------------- +                bne @failed 
-; Detect REU 1700,1764/50 or 1/2MB +                dex 
-;-------------------------------------------------- +                bpl -- 
-reudetect    lda #1            +            bank has correct signature 
-             sta $0286            ; textcolor white +            inc banknum next bank (== number of banks already found) 
-             lda #00 +            bne ---- 
-             sta $d020 +        ; there are actually 256 banks! 
-             sta $d021 +        sec 
-             sta banks +        lda banknum 
-             sta reubase +        rts 
-             cmp reubase +  
-             beq noreu        +@failed     clc 
-             bne unsafe +        lda banknum 
-unsafe       lda reubase +        rts 
-             and #16          ; check bit 4 for REU mem +  
-             cmp #16          ; 16 = 256Kbx1  +set_registers_AXY setup REU registers (used for both reading and writing) 
-             beq regcheck     ; yestouch registers +A/X: c64 address 
-             bne l1           ; no, 1700 ? +Y: REU command 
-l1           lda reubase +        sta reu_c64addr_lo 
-             and #16          ; check bit 4 for REU mem +        stx reu_c64addr_hi 
-             cmp #0 +        ldx #0 
-             beq r1700        reu 1700 found +        stx reu_extaddr_lo 
-             bne noreu        ; no ram-type, no reu, no fun ... +        stx reu_extaddr_hi 
-regcheck     lda reubase +        lda banknum 
-             ldx #2 +        sta reu_extaddr_bank 
-loop1        txa +        lda #SIGNATURE_LENGTH_LOW 
-             sta $df00,     ; write to registers 2-5                                          +        sta reu_len_lo 
-             inx +        stx reu_len_hi 
-             cpx #5 +        sty reu_command 
-             bne loop1 +        rts 
-             ldx #02  +  
-loop2        txa  +signature we write to REU banksfirst byte is bank number 
-             cmp $df00,             +signature_start 
-             bne noreu  +banknum     !tx 0, "bliblablub
-             inx +    SIGNATURE_LENGTH_LOW = * signature_start 
-             cpx #5 +  
-             bne loop2 +target buffer when reading signatures back from REU 
-             jmp rinit +sig_candidate_start 
-r1700        lda #<reutext +        !tx "XBLIBLABLUB"   must be same length as signature above, obviously 
-             ldy #>reutext               +sig_candidate_end 
-             jmp $ab1e +    SIGNATURE_LENGTH_LOW = * - sig_candidate_start
-;------------------------------------------------- +
-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",+
-reut2048: !text "REU 2048KB DETECTED",0 +
-reuunk:   !text "REU PORT DETECTED BANK ERROR",+
-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> </code>
base/reu_detect.txt · Last modified: 2023-10-26 20:24 by groepaz