Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 31 Ago 2017 14:27

Buenas, en este hilo trataremos de hacer las preguntas y resolver los problemas del proyecto, para no estorbar la info y los avances.
Pido a los administradores si pueden mover lo mensajes de discusión a este hilo y dejar solo la info publicada.
Básicamente los mensajes que tienen, trozos de código , o si me pueden dar privilegios de moverlo yo, solo para este proyecto, como en el caso del Hobbit, Y gracias

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 31 Ago 2017 14:39

Comienzo con una pregunta:

El puerto de teclado tiene una posición de de lectura de Filas y una de escritura de columnas, en este trozo de código de KEYIN, se hace una rotación del Byte de escritura, el problema que tengo, es que pienso y no se porque (falta de experiencia), que ese puerto de escritura el FF02 si lo lees daría basura, o todos ceros o todos unos, pero por supuesto debo estar equivocado y debería ser como una memoria RAM cualquiera que si pones un valor lo mantiene hasta que lo cambien, ya que si no no daría tiempo de leer la respuesta por el puerto FF00.

Yo más bien hubiera pensado que debo mantener el valor guardado e ir poniéndolo (escribiendolo), cada vez para activar el puerto y nunca leerlo

A ver si alguien me aclara.

El trozo en cuestión es el ROL en el que van avanzando el valor del carry inicialmente cero y lo van rotando por todo el puerto FF02
Linea $A1D9

Código: Seleccionar todo

0230   A1CB 34 54   KEYIN   PSHS   U,X,B   SAVE REGISTERS
0231   A1CD CE FF 00      LDU   #PIA0   POINT U TO PIA0
0232   A1D0 8E 01 52      LDX   #KEYBUF   POINT X TO KEYBOARD MEMORY BUFFER
0233   A1D3 4F         CLRA      * CLEAR CARRY FLAG, SET COLUMN COUNTER (ACCA)
0234   A1D4 4A         DECA      * TO $FF

0235   A1D5 34 12      PSHS   X,A   SAVE COLUMN CTR & 2 BLANK (X REG) ON STACK
0236   A1D7 A7 42      STA   2,U   INITIALIZE COLUMN STROBE TO $FF
         * Esto es extraño el puerto apuntado por U+2 es de salida y creo que el ROL Lee-Shifsea y luego escribe
         * Como es posible que lea en un puerto de salida?
0237   A1D9 69 42   LA1D9   ROL   2,U   * ROTATE COLUMN STROBE DATA LEFT 1 BIT, CARRY INTO BIT 0
0238   A1DB 24 43      BCC   LA220   * BRANCH IF 8 SHIFTS DONE

Avatar de Usuario
pser1
Mensajes: 2013
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 181 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor pser1 » 31 Ago 2017 18:51

Hola Luis
saludos
pere

0230 A1CB 34 54 KEYIN PSHS U,X,B SAVE REGISTERS
0231 A1CD CE FF 00 LDU #PIA0 POINT U TO PIA0
0232 A1D0 8E 01 52 LDX #KEYBUF POINT X TO KEYBOARD MEMORY BUFFER
0233 A1D3 4F CLRA * CLEAR CARRY FLAG, SET COLUMN COUNTER (ACCA)
0234 A1D4 4A DECA * TO $FF
0235 A1D5 34 12 PSHS X,A SAVE COLUMN CTR & 2 BLANK (X REG) ON STACK
0236 A1D7 A7 42 STA 2,U INITIALIZE COLUMN STROBE TO $FF
* Esto es extraño el puerto apuntado por U+2 es de salida - EFECTIVAMENTE
* y creo que el ROL Lee-Shifsea y luego escribe LO OLVIDAMOS
* ES posible LEER un REGISTRO de UN puerto CONFIGURADO COMO de salida!
0237 A1D9 69 42 LA1D9 ROL 2,U * ROTATE COLUMN STROBE DATA LEFT 1 BIT, CARRY INTO BIT 0
0238 A1DB 24 43 BCC LA220 * BRANCH IF 8 SHIFTS DONE

Veamos como funciona el tema de teclado.
En $ff02 se escribe el valor de las columnas que queremos leer (en binario %11111111)
En $ff00 se recoge la suma de las filas, todas estarán a +5V menos aquella que tenga
la tecla que se ha pulsado (estará a 0V) ya que estamos enviando UN cero y SIETE unos.
La misión del ROL es ir desplazando este cero, de forma que sucesivamente estamos enviando:
%11111110, %11111101, %11111011, %11110111
%11101111, %11011111, %10111111, %01111111
El cero se va moviendo y el BIT de mayor peso (b7) va entrando de nuevo via Carry
A cada pasada miramos si hay alguna fila con valor cero ...

El tema de puerto, NO debes considerarlo como puerto real, en realidad son dos puertos de la PIA0
que presenta cuatro registros que se pueden grabar y leer cuando se quiera (ff00-ff01-ff02-ff03)
ya que en el fondo equivalen a cuatro posiciones de memoria que reflejan configuración o valores del
puerto en cuestión.

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 01 Sep 2017 01:32

Si pero lo de que un puerto de salida se pueda leer, es lo que no me parece, no se si es verdad, que claro que lo será pues funciona, pero para mi siempre pense que los puertos de salida no se podían leer o mejor dicho, si uno los lee, lee basura, o ceros o unos, por eso mi duda.

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 01 Sep 2017 04:04

DISCUSIÓN DEL TECLADO
Como dije en el otro hilo, propongo que la rutina de teclado tenga unos cambios, entre los que propongo:
Un comando de KEYBOARD o KEYTYPE que cambiaria entre diversos tipos de teclado, "COCO", "DRAGON", "DP400".
Normalmente este comando no es necesario, ya que al encender el equipo, el BASIC evalúa ciertos parámetros para ver donde esta corriendo(en que equipo), y seleccionaria y dejaría marcada una variable de sistema(byte) con el tipo de EQUIPO en el cual está corriendo, esto a su vez configurará el tipo de teclado adecuado, PERO, este comando permitirá usar un teclado diferente al del equipo, tambien servira para esos equipos que siendo DRAGON les ponen teclado de coco o viceversa.

La idea es que el Keyboard layout se configurará con este comando, ahora bien cual seria el comando correcto:
PREGUNTA A CONTESTAR:, ¿cual seria el comando ideal?
CON STRINGS: Keyboard "COCO" o Keyboard "DRAGON" o Keyboard "CP400", etc..
CON UNA LETRA: Keyboard "C" o Keyboard "D", Keyboard "4", etc..
CON VARIABLES DE SISTEMA: Keyboard COCO o Keyboard DRAGON o Keyboard CP400, etc..
CON NÚMEROS: Keyboard 1 o Keyboard 4 o Keyboard 5, etc..

Existirá tambien la función Keyboard que retorna el tipo de teclado

Aparte Se hará un SCANCODE real, o sea, cada tecla es un número, y se podrá saber si está presionada o no

Luego con INKEY se podrá saber la tecla según el layout, colocando a la señal de soltar la tecla un 128 más el código de la tecla.

También existirá el comando KeySpeed, que tendrá 2 parámetros, tiempo para iniciar las repeticiones y velocidad de repetición
Con un valor cada uno de 0 a 255.
Y 2 funciones KeySpeed y KeyRate que devolverán los valores antes mencionados

PREGUNTA A CONTESTAR: Los valores de 0 a 255 serían: 0 lo más lento y 255 ¿lo más rápido? o al revés, ya que en programación seria mas facil que 255 fuera lo más lento, porque uno cuenta de 0 a 255 y tarda más, en cambio de 0 a 5 tardaria menos y seria una alta velocidad de repetición. (qué opinas)

Y que tan rápido o lento tendrían que ser estos valores, digamos para el keyRate una repetición muy lenta seria una letra por segundo? y la mas rapida?, seria todo lo que de la máquina?

Avatar de Usuario
pser1
Mensajes: 2013
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 181 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor pser1 » 01 Sep 2017 13:25

luiscoco escribió:Si pero lo de que un puerto de salida se pueda leer, es lo que no me parece, no se si es verdad, que claro que lo será pues funciona, pero para mi siempre pense que los puertos de salida no se podían leer o mejor dicho, si uno los lee, lee basura, o ceros o unos, por eso mi duda.

NO estás leyendo NINGUN puerto!
Estás leyendo UN REGISTRO de una PIA, cuyos pines/conexiones pueden ser configurados como entrada o salida
mediante el registro de control.
Los registros 'equivalen' a bytes de memoria y mantienen su valor hasta que no sean modificados.
Tanto para enviar datos de salida como para recibir los de entrada, accedemos al mismo registro de DATOS (grabar/leer)
saludos
pere

Pd quizá te ayude leer detenidamente la hoja de especificaciones de las PIAs MC6821 que pululan en los CoCo/Dragon
otra buena posibilidad es ver el libro Inside the Dragon que explica el funcionamiento de las PIAs
MC6821 PIA.zip
(1.04 MiB) Descargado 3 veces

Inside The Dragon.zip
(6.61 MiB) Descargado 6 veces

Avatar de Usuario
pser1
Mensajes: 2013
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 181 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor pser1 » 01 Sep 2017 15:28

luiscoco escribió:La idea es que el Keyboard layout se configurará con este comando, ahora bien cual seria el comando correcto:
PREGUNTA A CONTESTAR:, ¿cual seria el comando ideal?
CON STRINGS: Keyboard "COCO" o Keyboard "DRAGON" o Keyboard "CP400", etc..
CON UNA LETRA: Keyboard "C" o Keyboard "D", Keyboard "4", etc..
CON VARIABLES DE SISTEMA: Keyboard COCO o Keyboard DRAGON o Keyboard CP400, etc..
CON NÚMEROS: Keyboard 1 o Keyboard 4 o Keyboard 5, etc..

Ya sabes que los teclados están conectados de forma distinta en un CoCo que en un Dragón, así que las rutinas deberán ser distintas
para cada uno de ellos. No creo que tenga sentido hacer un Basic que funcione en los dos, será demasiado grande, dejando aparte
la mala idea que tuvieron de cambiar los 'token' a las palabras clave, para evitar temas de plagio.
Mejor poner código con directivas de compilación condicional y obtener dos binarios distintos ... además en la zona de 0-255 hay
variables de sistema que NO todas van a ser usadas con el mismo fin ... es IMPOSIBLE sincronizar dos relojes (mecánicos claro)
PREGUNTA A CONTESTAR: Los valores de 0 a 255 serían: 0 lo más lento y 255 ¿lo más rápido? o al revés, ya que en programación seria mas facil que 255 fuera lo más lento, porque uno cuenta de 0 a 255 y tarda más, en cambio de 0 a 5 tardaria menos y seria una alta velocidad de repetición. (qué opinas)

Existen rutinas ya hechas, en realidad en el Dragon 64 cuando pulsas EXEC y el cursor pasa a color azul, acaba de poner en marcha el sistema de
autorepetición controlado por una variable de la parte baja ($11f = retardo para repetición de teclado).
En un Dragón 32 puedes entrar este cortísimo programa Basic o entrarlo a mano:

Código: Seleccionar todo

100 POKE&HFF03,(PEEK(&HFF03)AND&HFE):POKE&H10D,&HBF:POKE&H10E,&H20:POKE&HFF03,(PEEK(&HFF03)OR1)

Lo que hacen estos pokes es:
El primero desactiva el IRQ y el último lo reactiva ...
Los otros dos modifican el hook para IRQ, lo derivan hacia la rutina en $BF20 que, en teoría, es utilizada por el BASIC modo 64 para controlar
la repetición de teclado, pero existe incluso en los D32! Puedes probarlo, funciona perfectamente -thumbup
Hay muchos secretos escondidos entre el Basic y el Hardware -507
saludos
pere

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 01 Sep 2017 15:53

Vamos a pensar en esto que me dices, Si hacemos 2 compilaciones
* Los programas BASIC con tokens para coco seguirán sin funcionar en DRAGON (Parcialmente) y viceversa
* Los programas BASIC ASCII para coco servirán en DRAGON (Parcialmente) y viceversa.

La idea es unificar y que en coco puedas correr programas DRAGON Y DP400 y viceversas
Este basic deberá detectar el programa que le das y hacer los cambios pertinentes para que funcione, incluso grabarlo de nuevo en otro de los formatos, de manera que corra en otro equipo que no tenga este basic.

Primero existirá una rutina o programa accesorio en disco que quite los números de línea sobrantes.
Habrá otro que le coloque a todo el programa números de línea para compatibilidad, este programa (si graba en formato token deberá saber si lo hace para COCO o Dragon o DP400.

Con respecto a la Auto repetición, la idea es tener un solo comando sin pokes, y además no es solo el retardo entre repeticiones sino en tiempo inicial.

Avatar de Usuario
pser1
Mensajes: 2013
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 181 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor pser1 » 01 Sep 2017 17:03

luiscoco escribió:Vamos a pensar en esto que me dices, Si hacemos 2 compilaciones
* Los programas BASIC con tokens para coco seguirán sin funcionar en DRAGON (Parcialmente) y viceversa
* Los programas BASIC ASCII para coco servirán en DRAGON (Parcialmente) y viceversa.
La idea es unificar y que en coco puedas correr programas DRAGON Y DP400 y viceversas
Este basic deberá detectar el programa que le das y hacer los cambios pertinentes para que funcione, incluso grabarlo de nuevo en otro de los formatos, de manera que corra en otro equipo que no tenga este basic.
Primero existirá una rutina o programa accesorio en disco que quite los números de línea sobrantes.
Habrá otro que le coloque a todo el programa números de línea para compatibilidad, este programa (si graba en formato token deberá saber si lo hace para COCO o Dragon o DP400.

Los programas ya existentes tienen otros problemas de compatibilidad, no solo los Token distintos. Por ejemplo llamadas a rutinas de la ROM
mediante el simple comando EXEC, por ejemplo POKE113,0:EXEC&HB3B4 para resetear la máquina
Y en cuanto entra en acción el DOS, las diferencias ya son brutales. De entrada el inicio de gráficos deja de ser el mismo ...
Si NO unificaron en los años 80 cuando había la cantidad de usuarios que llegó a haber, por algo sería
Con respecto a la Auto repetición, la idea es tener un solo comando sin pokes, y además no es solo el retardo entre repeticiones sino en tiempo inicial.

Los programas ponen valores en puntos / variables luego hacen POKE continuamente. Tampoco vamos a demonizar un comando de Basic
que permite hacer cosas que difícilmente se habrían podido programar en Basic, aparte de lo bien que va POKEar de $400 a $5ff en lugar
de andar PRINTando por ahí. Por cierto &H11f afecta a ambos valores: retardo inicial y frecuencia de repetición.
saludos
pere

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 02 Sep 2017 02:37

pser1 escribió:Los programas ya existentes tienen otros problemas de compatibilidad, no solo los Token distintos. Por ejemplo llamadas a rutinas de la ROM
mediante el simple comando EXEC, por ejemplo POKE113,0:EXEC&HB3B4 para resetear la máquina
Y en cuanto entra en acción el DOS, las diferencias ya son brutales. De entrada el inicio de gráficos deja de ser el mismo ...
Si NO unificaron en los años 80 cuando había la cantidad de usuarios que llegó a haber, por algo sería

Te encantan los pokes jeje. Que te parecería que se pudiera cambiar esto (POKE113,0:EXEC&HB3B4) a Reset? claro siempre que se utilicen literales.
También tratare de dejar muchas posiciones criticas en el mismo sitio, y para cada equipo.

pser1 escribió:Los programas ponen valores en puntos / variables luego hacen POKE continuamente. Tampoco vamos a demonizar un comando de Basic
que permite hacer cosas que difícilmente se habrían podido programar en Basic, aparte de lo bien que va POKEar de $400 a $5ff en lugar
de andar PRINTando por ahí. Por cierto &H11f afecta a ambos valores: retardo inicial y frecuencia de repetición.

El problema de ir pokeando es que si se mueve la pantalla o se pasa a disco ya no funciona
Igualmente aunque respete la posición &h11F para dragon yo pondría el comando KeyDelay o RepeatDelay o KeySpeed o KeyRep o KeyRate o RepeatRate
jajaja ya ni se

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 02 Sep 2017 12:24

Con respecto a esta discusión de teclado me falta lo principal, se hará por interrupciones?
Es muy rápido darse cuenta (y debido a que estamos acostumbrados a windows y otros sistemas operativos modernos) de que a veces escribimos cosas durante se realiza otra función, y luego el equipo toma nuestros comandos, (la mayoría de veces windows se congela, jaja y hay que esperarlo), esto se hace leyendo el teclado por interrupciones.

Si hacemos esto, deberá tener un comando para deshabilitar lo por compatibilidad

Pregunta: ¿Estamos de Acuerdo?

Avatar de Usuario
pser1
Mensajes: 2013
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 181 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor pser1 » 02 Sep 2017 12:58

luiscoco escribió:Con respecto a esta discusión de teclado me falta lo principal, se hará por interrupciones?
Es muy rápido darse cuenta (y debido a que estamos acostumbrados a windows y otros sistemas operativos modernos) de que a veces escribimos cosas durante se realiza otra función, y luego el equipo toma nuestros comandos, (la mayoría de veces windows se congela, jaja y hay que esperarlo), esto se hace leyendo el teclado por interrupciones.
Si hacemos esto, deberá tener un comando para deshabilitar lo por compatibilidad
Pregunta: ¿Estamos de Acuerdo?

La lectura de teclado es suficientemente rápida como para efectuarla cuando sea necesario.
Las interrupciones, si se puede, mejor reservarlas para temas como sonido o cambios de paleta.
Cuanto mas trabajo hagan las interrupciones, menos ciclos de CPU quedan libres para el programa.
Si te miras algunas demos de sonido de Simon Jonassen, verás que el basic es 'medianamente utilizable', pero se resiente mucho
del consumo de ciclos del IRQ que gestiona el sonido, aparte, ¿Para que vamos a andar leyendo el teclado N veces por segundo si lo que queremos
es velocidad de ejecución del programa?
MI opinión sería dejar la lectura de teclado para cuando haga falta y dentro del bucle principal del programa
saludos
pere

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 02 Sep 2017 13:23

Ok. te entiendo, pero tal vez opcional será mejor ya que pasa muchísimo que pierdes teclas porque no ha terminado de hacer cosas, y ya hay una búsqueda de break en medio de cada comando. que se podría poner desactivable, con las advertencias necesarias.
Por ejemplo, escribes un comando mientras listas un dir. y es muy incomodo trabajar con ella directamente(a veces), tal vez usando emuladores no se note, debido a que windows toma las pulsaciones y luego se las va entregando conforme las pida el emulador, pero en el equipo real si se nota bastante

Avatar de Usuario
pser1
Mensajes: 2013
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 181 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor pser1 » 02 Sep 2017 16:55

luiscoco escribió:Ok. te entiendo, pero tal vez opcional será mejor ya que pasa muchísimo que pierdes teclas porque no ha terminado de hacer cosas, y ya hay una búsqueda de break en medio de cada comando. que se podría poner desactivable, con las advertencias necesarias.
Por ejemplo, escribes un comando mientras listas un dir. y es muy incomodo trabajar con ella directamente(a veces), tal vez usando emuladores no se note, debido a que windows toma las pulsaciones y luego se las va entregando conforme las pida el emulador, pero en el equipo real si se nota bastante

Bufff, Luis ...
Al César lo que es del César.
Si se requiere celeridad hay que usar ensamblador o compilar directo a binario.
Si tu crees que un programa NO te lee una orden de teclado, solo es porqué el programa destina poco margen de tiempo a leerlo.
Alguien te diría que a veces sale a cuenta tener dos o tres puntos en el bucle principal donde se lee (y se guarda) la tecla pulsada.
Son opiniones ... yo prefiero estudiar cada caso individualmente y buscar la mejor solución posible.
saludos
pere

Pd el comando DIR lee la disquetera, pero para ello requiere dos interrupciones: IRQ y NMI. Si pretendes parar un comando de DOS para
hacer cualquier otra cosa, puedes tener por seguro que el comando acabará mal, de todas formas, ya me dirás como lo interrumpes si el
DOS trabaja con la interrupción de mas alto nivel de prioridad (NMI) y tiene rutina 'propia' de proceso del IRQ ... mal rollo a la vista!
En mi Dragon64 el comando DIR no permite acceso al teclado mas que cuando él lo necesita! Imagínate que está paginando porqué hay
muchos ficheros. Lo que teclees se usará para pasar página, no para un comando posterior ...

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor luiscoco » 02 Sep 2017 17:06

pser1 escribió:Bufff, Luis ...
Al César lo que es del César.
Si se requiere celeridad hay que usar ensamblador o compilar directo a binario.
Si tu crees que un programa NO te lee una orden de teclado, solo es porqué el programa destina poco margen de tiempo a leerlo.
Alguien te diría que a veces sale a cuenta tener dos o tres puntos en el bucle principal donde se lee (y se guarda) la tecla pulsada.
Son opiniones ... yo prefiero estudiar cada caso individualmente y buscar la mejor solución posible.
saludos
pere

Pd el comando DIR lee la disquetera, pero para ello requiere dos interrupciones: IRQ y NMI. Si pretendes parar un comando de DOS para
hacer cualquier otra cosa, puedes tener por seguro que el comando acabará mal, de todas formas, ya me dirás como lo interrumpes si el
DOS trabaja con la interrupción de mas alto nivel de prioridad (NMI) y tiene rutina 'propia' de proceso del IRQ ... mal rollo a la vista!
En mi Dragon64 el comando DIR no permite acceso al teclado mas que cuando él lo necesita! Imagínate que está paginando porqué hay
muchos ficheros. Lo que teclees se usará para pasar página, no para un comando posterior ...

Muy de acuerdo contigo, habrá que tomar las precauciones del caso, pero...
Veamos el DIR. lee los sectores 2 al 11 o ya los tiene leidos, puede leer teclado entre sector y sector posiblemente, si es DRAGON o DIR coco mejorado con paginación (tambien), simplemente tomaran las teclas para usarlas en el salto de página sin más, no así la tecla BREAK que tiene prioridad y detendría todo al menos al terminar cada página.

Otro comando crítico es el DSKINI o DSKINIT, que tengo unas ganas terribles de usar FORMAT (adicionalmente para mantener compatibilidad)
Aun asi se deberia poder parar entre Track y Track y más aún en la verificación

Avatar de Usuario
pser1
Mensajes: 2013
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 181 veces

Re: Proyecto Basic CoCo/Dragon/DP400 (Discusiones)

Mensajepor pser1 » 02 Sep 2017 18:19

luiscoco escribió:Muy de acuerdo contigo, habrá que tomar las precauciones del caso, pero...
Veamos el DIR. lee los sectores 2 al 11 o ya los tiene leidos, puede leer teclado entre sector y sector posiblemente, si es DRAGON o DIR coco mejorado con paginación (tambien), simplemente tomaran las teclas para usarlas en el salto de página sin más, no así la tecla BREAK que tiene prioridad y detendría todo al menos al terminar cada página.

El comando dir muestra la longitud de los ficheros y para ello tiene que acceder a la cabecera de cada fichero, lo cual implica acceder
a un sector extra por cada fichero que estés listando.
Otro comando crítico es el DSKINI o DSKINIT, que tengo unas ganas terribles de usar FORMAT (adicionalmente para mantener compatibilidad)
Aun asi se deberia poder parar entre Track y Track y más aún en la verificación

Estamos hablando de máquinas de 8 bits, no de pepinos multicore con Gb de RAM.
¿Qué es tan urgente que tiene que interrumpir un DSKINIT? SI ya son 'peligrosos' solitos no me imagino interrumpirlos ...
Y repito, ¿Para qué? si hay algo tan urgente, se para o uno se aguanta, tampoco tardan tanto ;-)
No recuerdo ahora si CoCo funciona como Dragón, pero éste último tiene TRES buffers de 256 para lectura de sectores.
UNO se guarda con el sector del directorio en curso, otro se usará para ir a buscar el fichero a listar y obtener los datos
de su cabecera (otro sector leído), el tercero, a veces, lo reservan para la FAT
saludos
pere


Volver a “Tandy CoCo”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado