Acceso a FATWARE por software

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
Bubu
Atari 1040 STf
Atari 1040 STf
Mensajes: 886
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 20 veces
Gracias recibidas: 60 veces

Acceso a FATWARE por software

Mensajepor Bubu » 08 Sep 2018, 13:31

¡Jarl, torpedos!

Hago una pregunta con mucho ware, jiji: ¿se puede acceder al Fatware desde el software? Uséase, ¿puedo hacer un pograma en ensamblador, de tal manera que mediante alguna instrucción OUT acceda a la tarjeta CF de un divIDE?
Lo pregunto porque se me ha ocurrido la siguiente paranoia: hacer un pograma en ensamblador que muestre una lista de juegos (la lista no la leería de la CF, sino que estaría embebida en el propio código fuente del pograma), y con los cursores me manejo, y al pulsar ENTER, cargo el TAP de ese juego. Sería algo así como sustituir el propio Fatware por un pograma que estaría en la misma CF.

Y la idea si se aplica al ResiDOS ya sería lo máximo: conseguiríamos visualizar los juegos con todos sus caracteres, y no sólo truncado a 8 caracteres.

¿Se puede?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Kyp
Commodore 128
Commodore 128
Mensajes: 80
Registrado: 31 Dic 2013, 12:42
Sistema Favorito: Commodore Amiga
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: Vectrex
Gracias dadas: 10 veces
Gracias recibidas: 10 veces

Re: Acceso a FATWARE por software

Mensajepor Kyp » 13 Sep 2018, 16:35

Si se puede, el hardware del interfaz IDE es independiente del harware de mapeo de la RAM/ROM.
Por ejemplo, esto envía el comando IDENTIFY y lee los 512 bytes de respuesta del dispositivo:

Código: Seleccionar todo


ioData      equ   $a3   ; RW Data
ioDevice      equ   $bb   ; RW Drive/LBA bits 24 to 28
ioStatus      equ   $bf   ; R- Status
ioCommand   equ   $bf   ; -W Command
ioControl      equ   $e3   ; -W memory mapping control

ataDev0      equ   $a0   ; device 0 (master)
ataIdentify   equ   $ec   ; Identify device
ataSbReady   equ   6
ataSmFault   equ   $20   ; Device Fault
ataSmError   equ   $01   ; Error

ataBuffer      ds   512
;-------------------------------------------------------------------------------
Identify   ; read device identify data
;-------------------------------------------------------------------------------
; input   ataBuffer (buffer of 512 bytes to store identify data)
;-------------------------------------------------------------------------------
; output:   Z flag clear if error

.busy   in   a,(ioStatus)      ; wait while busy
      rlca
      jr   c,.busy

      ld   a,ataDev0         ; set device 0
      out   (ioDevice),a
      ld   a,ataIdentify      ; set command
      out   (ioCommand),a
      nop               ; 400 ns delay

.ready   in   a,(ioStatus)      ; wait until ready
      bit   ataSbReady,a
      jr   z,.ready
      and   ataSmFault|ataSmError
      ret   nz            ; ERROR

      ld   hl,ataBuffer      ; hl = data buffer
      ld   bc,ioData         ; b  = 0 (repeat 256 times), c = data port
      inir               ; read 256 bytes
      inir               ; read 256 bytes

      xor   a            ; SUCCESS
      ret


He hecho un poco de copy/paste de mi proyecto inacabado de firmware alternativo para el DivIDE, igual he copiado algo mal o me he dejado algo sin copiar pero para coger la idea creo que te vale. Toda la información la tienes en la web del DivIDE de velesoft.


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 20 invitados