Autore Topic: Un Monitor Incorporato Nel C64  (Letto 2646 volte)

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Un Monitor Incorporato Nel C64
« il: 21 Dicembre 2004, 01:45:46 »
 Per visualizzare il contenuto della ram da 0 a 999
POKE 53272,4
invece quella da 2048 a 3047
POKE53272,36

in tutti questi anni non ci avevo mai pensato :D
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Un Monitor Incorporato Nel C64
« Risposta #1 il: 21 Dicembre 2004, 02:18:12 »
 Ci stava troppo dentro un programmino fatto al volo per sfruttare questa meraviglia (ROTFL)
Codice: [Seleziona]
;----------------------------------------------------------
; Sfruttiamo il registro VIC $D018 (53272) per visualizzare
; la memoria, semplicemente premendo i tasti funzione
; Compilare con dasm
; iAN CooG/HokutoForce
;----------------------------------------------------------
        org $0801
irq = $0334
        .word eop
        .word 7102
        .byte $9e
        .byte "2059"
eop     .byte 0
;----------------------------------------------------------
        ldy  #0
       ;metto la routine residente nel tapebuffer
rloop
        lda relocme,y
        sta irq,y
        iny
        cpy #(endreloc-relocme)
        bne rloop
       ;setto il nuovo vettore
        lda #<irq
        ldx #>irq
        sei
        sta $0314
        stx $0315
        cli
        rts
;----------------------------------------------------------
relocme
        rorg irq
        jsr keyloop
        jmp $ea31

keyloop
       ; salvo lo stato di $dc00
        lda $dc00
        pha
       ; imposto la lettura dei tasti funzione
       ; direttamente dalla keymatrix
        lda #$fe
        sta $dc00
        lda $dc01
       ; salvo il valore letto
        sta $02
       ; ripristino $dc00
        pla
        sta $dc00
       ; ora confrontiamo se e' stato premuto un fkey
        ldx #3
ck
        lda $02
        cmp table,x
        beq setthis
        dex
        bpl ck
       ; nessun tasto dei 4 previsti, esci
        rts
setthis
       ; ora ho l'indice 0-3
       ; devo settare $04,$14,$24,$34
        txa
        asl;*2
        asl;*4
        asl;*8
        asl;*16
        clc
        adc #04
        sta $d018
        rts
;----------------------------------------------------------
table
        .byte $ef;f1
        .byte $df;f3
        .byte $bf;f5
        .byte $f7;f7
        rend
endreloc
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Un Monitor Incorporato Nel C64
« Risposta #2 il: 21 Dicembre 2004, 12:03:34 »
  :metallica:  ;)  

MarC=ello

  • Utente
  • **
  • Post: 337
  • Gioco Preferito: CBM BASIC 2.0
Un Monitor Incorporato Nel C64
« Risposta #3 il: 21 Dicembre 2004, 15:16:10 »
 Veramente interessante, non ci avevo pensato!   ;)  

Grande iAN!
-=MarC=ellO=-

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Un Monitor Incorporato Nel C64
« Risposta #4 il: 24 Dicembre 2004, 13:12:14 »
 Piccola modifica per sfruttare anche combinazioni di Shift e C= con i tasti funzione, arrivando a coprire tutti i 16 valori possibili.
Codice: [Seleziona]
relocme
       rorg irq
      ; salvo lo stato di $dc00
       lda $dc00
       pha
      ; imposto la lettura dei tasti funzione
      ; direttamente dalla keymatrix
       lda #$fe
       sta $dc00
       lda $dc01
      ; salvo il valore letto
       sta $02
      ; ripristino $dc00
       pla
       sta $dc00
      ; ora confrontiamo se e' stato premuto un fkey
       ldx #3
ck
       lda $02
       cmp table,x
       beq setthis
       dex
       bpl ck
      ; nessun tasto dei 4 previsti, esci
       BMI EXIT
setthis
      ; ora ho l'indice 0-3
      ; devo settare $04,$14,$24,$34
      ; +shift       $44,$54,$64,$74
      ; +cbm         $84,$94,$a4,$b4
      ; +shift+cbm   $c4,$d4,$e4,$f4
       txa
       asl;*2
       asl;*4
       asl;*8
       asl;*16
       sta $02
       lda $028D;: shift status
       asl
       asl
       asl
       asl
       asl
       asl;*64
       clc
       adc $02
       adc #04
       sta $d018
      ;solo per debug, dal colore so se setto
      ;il nybble alto correttamente
      ;lsr
      ;lsr
      ;lsr
      ;lsr
      ;sta $d020
EXIT
       jmp $ea31
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -