Ready64 Forum
Commodore 64 => Programmazione, Grafica e Musica => Topic aperto da: iAN CooG - 06 Giugno 2004, 01:22:21
-
Premessa: Continuo a postare un altro sorgente, sperando che altri facciano lo stesso.
Come collaboratore esterno di Papposoft :P ho scritto questa routine per poter rilocare lo schermo a $c000 anziche' $0400 (1024), convertendo in asm alcuni esempi in Basic sul Programmer's Reference Guide.
Poco fa ho riscritto la parte che ricopia il charset per risparmiare un po' di bytes.
;**********************************************************
; Set charset at $C000, screen at $C800; C64ASM version
; -=[iAN CooG/HokutoForce]=- for Piti/Papposoft
;**********************************************************
BANK = 3
CHARROM = $D000
BANKBASE= (BANK*$4000)
CHAROFF = $0000
CHARSET = BANKBASE+CHAROFF
SCREENOFF= $0800
SCREEN = BANKBASE+SCREENOFF
TEST = 1 ; 1 to create a test prg,
; 0 for callable routines @ $8000/$8003
;**********************************************************
.IF TEST = 0 .GOTO not1
*=$801
.word eob
.word $1bbe
.byte $9e
.text "2061"
eob
*=$80d
.GOTO not2
.LABEL not1
*=$8000
.LABEL not2
JMP change
JMP normal
;**********************************************************
change
SEI
;LDA $DC0E; are these needed in BASIC?
;AND #$FE; I think here only a SEI is enough
;STA $DC0E
LDA $DD02
ORA #$03
STA $DD02
LDA $DD00
AND #$FC
ORA #(3-BANK); switch bank: 3 = bank0 so 0 = bank3
STA $DD00
LDA #>SCREEN
STA $0288
LDA #$33
STA $01
; copy the 2048 bytes of Upper/graphics charset
; 34 bytes version ; 53 bytes version
; ; LDY #0
LDA #<CHARROM ;loop1
STA $5F ; LDA CHARROM,y
LDA #>CHARROM ; STA CHARSET,y
STA $60 ; LDA CHARROM+$100,y
LDA #<CHARSET ; STA CHARSET+$100,y
STA $58 ; LDA CHARROM+$200,y
LDA #>CHARSET ; STA CHARSET+$200,y
STA $59 ; LDA CHARROM+$300,y
LDX #8; 8*256=2048 ; STA CHARSET+$300,y
LDY #0 ; LDA CHARROM+$400,y
loop1 ; STA CHARSET+$400,y
LDA ($5f),y ; LDA CHARROM+$500,y
STA ($58),y ; STA CHARSET+$500,y
DEY ; LDA CHARROM+$600,y
BNE loop1 ; STA CHARSET+$600,y
INC $60 ; LDA CHARROM+$700,y
INC $59 ; STA CHARSET+$700,y
DEX ; DEY
BNE loop1 ; BNE loop1
LDA #$37
STA $01
; Highnibble:screen pos , lownibble:charset,
; see P.R.G. chapt 3
LDA #((SCREENOFF/$40)+(CHAROFF/$400))
STA $D018
;LDA $DC0E
;ORA #$01
;STA $DC0E
CLI
;**********************************************************
.IF TEST = 0 .GOTO not3
;just for test
LDY #(endtext-press-1)
p1
LDA press,y
STA SCREEN,y
DEY
BPL p1
k
JSR $ffe4
BEQ k
JSR $e544
LDY #(endtext-text-1)
p2
LDA text,y
STA SCREEN,y
DEY
BPL p2
; Patch to write real screen address
LDA #>SCREEN
JSR dexit
STX SCREEN+(patchit-text)
STA SCREEN+(patchit-text)+1
k2
JSR $ffe4
BEQ k2
.LABEL not3
RTS
;**********************************************************
normal
SEI
LDA $DD02
ORA #$03
STA $DD02
LDA $DD00
AND #$FC
ORA #3
STA $DD00
LDA #04
STA $0288
LDA #(($0400/$40)+($1000/$400))
STA $D018
CLI
RTS
;**********************************************************
.IF TEST = 0 .GOTO not4
text
.SCRU "SCREEN NOW:$"
patchit
.SCRU "0000"
.SCRU "! SYS 2064 back to $0400"
press
.SCRU "Press a key"
endtext
;**********************************************************
dexit
PHA
LSR
LSR
LSR
LSR
JSR check
TAX
next
PLA
AND #$0f
JSR check
RTS
check
CMP #$0a
BCS hex
CLC
ADC #$30
RTS
hex
SEC
SBC #$09; screencodes: A=$01
RTS
.LABEL not4
Compilare con C64ASM di Balint Toth.
http://tothb.ehc.hu/software/c64asm1a.zip (http://tothb.ehc.hu/software/c64asm1a.zip)
lo so, dovrei usare dasm/acme/64tass/ca65 ma ormai sono abituato con quello :)
-
Ottimo esempio di conversione Basic-LM :)
Continuo a postare un altro sorgente, sperando che altri facciano lo stesso.
Perchè non dedicare una sezione alle routine di utilità scritte in linguaggio macchina? :)
Secondo me sarebbe molto più facile andarle a prendere cercandole in una sezione apposita,che avendole sparpagliate qua e là nei thread di questa sezione.
-
Perchè non dedicare una sezione alle routine di utilità scritte in linguaggio macchina? :)
Bisogna vedere se il numero di post a riguardo ne giustifichi la creazione ;)
-
Perchè non dedicare una sezione alle routine di utilità scritte in linguaggio macchina? :)
Bisogna vedere se il numero di post a riguardo ne giustifichi la creazione ;)
Ian, ti invito a non demordere. ;)
In questo forum ci sono già molte persone con cui poter dialogare di programmazione: Alberto, Marcello, Med, Stefano Tognon (eccezionale il suo diario online di great sara sister) e magari altri si uniranno in seguito... dopotutto la sezione è ancora giovane e quindi poco conosciuta per il momento.
Magari un giorno torneranno anche Mr. Fox e Luigi Di Fraia ed allora potrebbero nascere veramente degli spunti interessanti e soprattutto utili anche in futuro a tutti quelli che vorranno cimentarsi.
Per quanto mi rigurda, mie conoscenze mi elevano faticosamente al rango di schiappa, ma nonostante ciò voglio comunque dare il mio apporto alla causa; vi comunico che a breve pubblicherò le prime scansioni di Commodore Computer Club, rivista che ha presentato, nel corso della sua vita editoriale, tantissimi articoli sulla programmazione, con listati, spiegazioni, tutorial eccetera.
Spero che questa sezione dia a tutti voi un nuovo impulso per continuare nella vostra opera, quella di programmare una macchina di 20 anni fa :)