Autore Topic: Richiesta Routine  (Letto 2244 volte)

tostilio

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: usagj yojimbo
Richiesta Routine
« il: 08 Febbraio 2011, 15:03:27 »
 Mi servirebbe un programmino (possibilmente in basic per c64, ma credo che vada bene per ogni computer commodore) che preso un codice ASCII ne restituisca il corrispondente codice video...
Grazie in anticipo

tostilio

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: usagj yojimbo
Richiesta Routine
« Risposta #1 il: 08 Febbraio 2011, 16:21:06 »
Citazione da: "tostilio"
Mi servirebbe un programmino (possibilmente in basic per c64, ma credo che vada bene per ogni computer commodore) che preso un codice ASCII ne restituisca il corrispondente codice video...
Grazie in anticipo
Vabbé dai... forse l'ho trovata su un vecchio libro sul C64!

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Richiesta Routine
« Risposta #2 il: 09 Febbraio 2011, 00:57:00 »
 http://sta.c64.org/cbm64pettoscr.html
e viceversa
http://sta.c64.org/cbm64scrtopet.html
ora che sai come, non e' cosi' difficile scrivere 2 righe per farti la conversione.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

tostilio

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: usagj yojimbo
Richiesta Routine
« Risposta #3 il: 11 Febbraio 2011, 17:01:10 »
 Avevo trovato questo:

# RIF. assembler_per_il_c64_e_vic-20 - pag. 198
         SEC
         CMP #$40
         BCC FINFIX
         CMP #$60
         BCC SUB.40
         SBC #$20
         RTS
      SUB.40   SEC
         SBC #$40
      FINFIX   RTS

che in effetti  non funziona molto bene...

Da qualche parte nel kernel del C64 ci deve pur stare qualcosa di simile già fatto... sta conversione il kernel del c64 la deve fare senz'altro.
Ne farò una a "manella"!

Grazie mille.

 

tostilio

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: usagj yojimbo
Richiesta Routine
« Risposta #4 il: 11 Febbraio 2011, 17:14:49 »
 OK... questa è la funzione che mi serviva (la posto così come l'ho fatta... non mi viene in mente nient'altro di meglio, ma forse quella originale del kernel agisce su gruppi di bit ed è migliore):

byte asciiCode2videoCode(char chr) {
   byte retValue;
   
   if((byte)chr < 32) {
      retValue = (byte)chr + 128;
   } else if((byte)chr < 64) {
      retValue = (byte)chr;
   } else if((byte)chr < 96) {
      retValue = (byte)chr - 64;
   } else if((byte)chr < 128) {
      retValue = (byte)chr - 32;
   } else if((byte)chr < 160) {
      retValue = (byte)chr + 64;
   } else if((byte)chr < 192) {
      retValue = (byte)chr - 64;
   } else if((byte)chr < 255) {
      retValue = (byte)chr - 128;
   } else {
      retValue = 94;
   }
   
   return retValue;
}


posso dire che funziona... ma i caratteri di controllo (p.es. il return carriage deve essere programmato a parte!).

Grazie ancora.