User Tools

Site Tools


base:reu_detect

Differences

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

Link to this comparison view

Next revision
Previous revision
base:reu_detect [2015-04-17 04:33] – created - external edit 127.0.0.1base:reu_detect [2023-10-26 20:24] (current) 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 banksevaluate 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;    +
-;                     +
-; ------------------------------------------------------------------------------------------------------------------ +
-; 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 +; returns: 
- +;   Carry = 00    NO REU detected 
-!byte $00,$0c,$08,$0a,$00,$9e,$32,$30,$36,$32,$00,$00,$00,$00 +;   Carry 1, A = 0    256 Banks (16MB) 
- +  else Carry 0, A number of RAM banks found in REU 
-*$080e +detect_capacity 
- +        ldx #0  pre-init 
-reubase      $df00 +        first write signatures to banks in *descending* order (banks 255..0): 
-reucommand   = $df01 +----            dex 
-banks        $1500     ; to store found banks and count +            stx banknum 
- +            lda #<signature_start 
- +            ldx #>signature_start 
-;-------------------------------------------------- +            ldy #REUCOMMAND_STASH 
-Detect REU 1700,1764/50 or 1/2MB +            jsr set_registers_AXY 
-;-------------------------------------------------- +            ; all banks written? 
-reudetect    lda #1            +            ldx banknum 
-             sta $0286            ; textcolor white +            bne ---- 
-             lda #00 +        now check signatures in *ascending* order: 
-             sta $d020 +(checking signatures could be shortened by using the REC's "verify" command
-             sta $d021 +but I'm reluctant to use this function in a "REU detect" routine: it could 
-             sta banks +be buggy in modern FPGA implementations because it is so seldomly used) 
-             sta reubase +        ; banknum just became zero so no need to init it 
-             cmp reubase +----            lda #<sig_candidate_start 
-             beq noreu        +            ldx #>sig_candidate_start 
-             bne unsafe +            ldy #REUCOMMAND_FETCH 
-unsafe       lda reubase +            jsr set_registers_AXY 
-             and #16          ; check bit 4 for REU mem +            compare data 
-             cmp #16          16 = 256Kbx1  +            ldx #SIGNATURE_LENGTH_LOW - 1 
-             beq regcheck     ; yestouch registers +--              lda sig_candidate_start, x 
-             bne l1           no, 1700 ? +                cmp signature_start, x 
-l1           lda reubase +                bne @failed 
-             and #16          ; check bit 4 for REU mem +                dex 
-             cmp #0 +                bpl -- 
-             beq r1700        reu 1700 found +            bank has correct signature 
-             bne noreu        ; no ram-type, no reu, no fun ... +            inc banknum next bank (== number of banks already found) 
-regcheck     lda reubase +            bne ---- 
-             ldx #2 +        there are actually 256 banks! 
-loop1        txa +        sec 
-             sta $df00,     write to registers 2-5                                          +        lda banknum 
-             inx +        rts 
-             cpx #5 +  
-             bne loop1 +@failed     clc 
-             ldx #02  +        lda banknum 
-loop2        txa  +        rts 
-             cmp $df00,x              +  
-             bne noreu  +set_registers_AXY setup REU registers (used for both reading and writing) 
-             inx +A/X: c64 address 
-             cpx #5 +Y: REU command 
-             bne loop2 +        sta reu_c64addr_lo 
-             jmp rinit +        stx reu_c64addr_hi 
-r1700        lda #<reutext +        ldx #0 
-             ldy #>reutext               +        stx reu_extaddr_lo 
-             jmp $ab1e +        stx reu_extaddr_hi 
-;------------------------------------------------- +        lda banknum 
-rinit        ldx #00          1764 wake up +        sta reu_extaddr_bank 
-rinit2       lda #128         stash  +        lda #SIGNATURE_LENGTH_LOW 
-             sta config +        sta reu_len_lo 
-             lda #$12         ; write some crap in ...  +        stx reu_len_hi 
-             sta c64hi+1 +        sty reu_command 
-             stx bank+1 +        rts 
-             jsr main          +  
-             inx +; signature we write to REU banks, first byte is bank number 
-             cpx #33          ;  ... 33 banks into somewhere +signature_start 
-             bne rinit2 +banknum     !tx 0, "bliblablub" 
-             jmp action +    SIGNATURE_LENGTH_LOW = * signature_start 
-noreu        lda #<notext +  
-             ldy #>notext               +; target buffer when reading signatures back from REU 
-             jmp $ab1e +sig_candidate_start 
-;-------------------------------------------------- +        !tx "XBLIBLABLUB  ; must be same length as signature aboveobviously 
-Count banks  +sig_candidate_end 
-;-------------------------------------------------- +    SIGNATURE_LENGTH_LOW = * sig_candidate_start
-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",+
-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> </code>
base/reu_detect.1429238018.txt.gz · Last modified: 2015-04-17 04:33 by 127.0.0.1