Nuevo proyecto Basic CoCo/Dragon/DP400

Avatar de Usuario
pser1
Mensajes: 2408
Registrado: 08 Dic 2012 18:34
Agradecido : 412 veces
Agradecimiento recibido: 467 veces

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor pser1 » 15 Sep 2017 15:58

Último mensaje de la página anterior:

luiscoco escribió:Si claro, tienes toda la razón, Lo que quiero es dejar tozos donde colocar las mejoras que hagamos, con un indice en el principal, por eso lo hago, posiblemente quite el código basic actual pero quedaría la discusión de comando.
Porque si se hace en un solo post, no se entiende, ya veras que después con el indice queda mas o menos bien.
Lo de empezar, estoy muy de acuerdo, cuando quieras empezamos, cual ensamblador te gusta, aunque también tengo uno, pero no me quiero liar.
Alguna preferencia?

Para editar textos en ensamblador, yo utilizo el TextPad en mi PC.
Una vez finalizada la edición lo compilo con ASM6809 de Ciaran Anscomb (Sixxie) o bien con LWASM de las LWTOOLS (William Astle)
cuando quiero controlar ciclos de reloj (optimizar velocidad de ejecución)
El binario que sale de cualquiera de los dos lo puedo cargar en XRoar mediante Control+L, así puedo grabarlo en disco,
si quiero guardarlo para mas adelante.
El tema es: ¿A que nos dedicamos? Al Basic de CoCo o al de Dragón? Porqué hacer uno único que funcione en los dos, dudo que
seamos capaces sin dedicar SEMANAS al análisis detallado de las implicaciones que comporta: De entrada por poca cosa que toques,
los D.O.S. respectivos dejarán de funcionar ya que hacen multitud de llamadas a SU Basic y las 'entradas' que llevan a cabo cada
comando o palabra reservada son diferentes y están en distinta posición de memoria -banghead
saludos
pere

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 15 Sep 2017 19:36

Te contesto en el de discusiones

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 20 Sep 2017 17:51

JOYSTK ($A9C6 - $A9DE)
Esta rutina evalúa la linea de Basic para los Joysticks

Código: Seleccionar todo

1415         * JOYSTK
1416   A9C6 BD B7 0E   JOYSTK   JSR   LB70E   EVALUATE JOYSTICK ARGUMENT
1417   A9C9 C1 03      CMPB   #3   TWO JOYSTICKS MAXIMUM (HOR & VER FOR EACH)
1418   A9CB 10 22 0A 7B      LBHI   LB44A   ‘ILLEGAL FUNCTION CALL’ IF >3
1419   A9CF 5D         TSTB      SET FLAGS
1420   A9D0 26 02      BNE   LA9D4   GET NEW DATA ONLY IF JOYSTK(0)
1421   A9D2 8D 0A      BSR   GETJOY   GET NEW DATA FOR ALL JOYSTICKS
1422   A9D4 8E 01 5A   LA9D4   LDX   #POTVAL   POINT X TO JOYSTICK DATA BUFFER
1423   A9D7 D6 53      LDB   FPA0+3   WHICH JOYSTICK DID YOU WANT?
1424   A9D9 E6 85      LDB   B,X   PUT ITS DATA INTO ACCB
1425   A9DB 7E B4 F3      JMP   LB4F3   CONVERT ACCB INTO FLOATING POINT NUMBER


Rutina de conversión de los 6 BITs por software con el conversor analógico A/D ($A9DE - $AA19)

Código: Seleccionar todo

1426         *
1427         * JOYSTK DATA AT:
1428         * $15A $15B  $15C  $15D
1429         * LEFT LEFT  RIGHT RIGHT
1430         * VERT HORIZ VERT  HORIZ
1431
1432         ** THIS IS A 6 BIT SOFTWARE A/D CONVERSION ROUTINE
1433   A9DE 8D 94   GETJOY   BSR   LA974   TURN OFF AUDIO
1434   A9E0 8E 01 5E      LDX   #POTVAL+4   POINT X TO JOYSTICK DATA BUFFER
1435   A9E3 C6 03      LDB   #3   GET FOUR SETS OF DATA (4 JOYSTICKS)
1436   A9E5 86 0A   LA9E5   LDA   #10   10 TRIES TO GET STABLE READING
1437   A9E7 ED E3      STD   ,--S   STORE JOYSTICK NUMBER AND TRY NUMBER ON THE STACK
1438   A9E9 8D B7      BSR   LA9A2   SET THE SELECT INPUTS ON ANALOG MULTIPLEXER
1439   A9EB CC 40 80   LA9EB   LDD   #$4080   ACCA IS A SHIFT COUNTER OF HOW MANY BITS TO CONVERT
1440         *         AND WIlL BE $40 (6 BITS) FOR THE COLOR
1441         *         COMPUTER. ACCB CONTAINS A VALUE EQUAL TO 1/2
1442         *         THE CURRENT TRIAL DIFFERENCE. INITIALLY =$80 (2.5 VOLTS).
1443   A9EE A7 E2   LA9EE   STA   ,-S   TEMP STORE SHIFT COUNTER ON STACK
1444   A9F0 CA 02      ORB   #2   KEEP RS 232 SERIAL OUT MARKING
1445   A9F2 F7 FF 20      STB   DA   STORE IN D/A CONVERTER
1446   A9F5 C8 02      EORB   #2   PUT R5232 OUTPUT BIT BACK TO ZERO
1447   A9F7 B6 FF 00      LDA   PIA0   HIGH BIT IS FROM COMPARATOR
1448   A9FA 2B 03      BMI   LA9FF   BRANCH IF COMPARATOR OUTPUT IS HIGH
1449   A9FC E0 E4      SUBB   ,S   SUBTRACT 1/2 THE CURRENT TRIAL DIFFERENCE
1450   A9FE 8C         FCB   SKP2   SKIP NEXT TWO BYTES
1451   A9FF EB E4   LA9FF   ADDB   ,S   ADD 1/2 OF THE CURRENT TRIAL DIFFERENCE
1452   AA01 A6 E0      LDA   ,S+   PULL SHIFT COUNTER OFF THE STACK
1453   AA03 44         LSRA      SHIFT IT RIGHT ONCE
1454   AA04 81 01      CMPA   #1   HAVE ALL THE SHIFTS BEEN DONE?
1455   AA06 26 E6      BNE   LA9EE   NO
1456   AA08 54         LSRB      YES - THE DATA IS IN THE TOP 6 BYTES OF ACCB
1457   AA09 54         LSRB      PUT IT INTO THE BOTTOM SIX
1458   AA0A E1 1F      CMPB   -1,X   IS THIS VALUE EQUAL TO THE LAST TRY?
1459   AA0C 27 04      BEQ   LAA12   YES - GO SAVE THE VALUE
1460   AA0E 6A E4      DEC   ,S   NO-DECREMENT TRIES COUNTER
1461   AA10 26 D9      BNE   LA9EB   BRANCH IF YOU HAVEN’T TRIED 10 TIMES
1462         * IF YOU FALL THROUGH HERE YOU HAVE TRIED TO GET THE SAME READING
1463         * 10 TIMES AND NEVER GOTTEN A MATCH. AS A RESULT YOU JUST FALL
1464         * THROUGH AND USE THE LAST VALUE READ IN.
1465   AA12 E7 82   LAA12   STB   ,-X   SAVE THE DIGITIZED VALUE
1466   AA14 EC E1      LDD   ,S++   GET THE NUMBER OF THE JOYSTICK JUST DONE
1467   AA16 5A         DECB      DECR JOYSTK NUMBER
1468   AA17 2A CC      BPL   LA9E5   BRANCH IF THE LAST ONE DONE WASN’T NUMBER 0
1469   AA19 39         RTS


Rutina de chequeo numérico y fin de linea ($AA1A - $AA28)

Código: Seleccionar todo

1470         *
1471         * SET CARRY IF NUMERIC - RETURN WITH
1472         * ZERO FLAG SET IF ACCA = 0 OR 3A(:) - END
1473         * OF BASIC LINE OR SUB LINE
1474   AA1A 81 3A   BROMHK   CMPA #'9+1      IS THIS CHARACTER >=(ASCII 9)+1?
1475   AA1C 24 0A         BHS   LAA28      BRANCH IF > 9; Z SET IF = COLON
1476   AA1E 81 20         CMPA #SPACE      SPACE?
1477   AA20 26 02         BNE   LAA24      NO - SET CARRY IF NUMERIC
1478   AA22 0E 9F         JMP   GETNCH      IF SPACE, GET NECT CHAR (IGNORE SPACES)
1479   AA24 80 30   LAA24   SUBA #'0         * SET CARRY IF
1480   AA26 80 D0         SUBA #-'0         * CHARACTER > ASCII 0
1481   AA28 39      LAA28   RTS

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:10

Continuando el proyecto, he ido modificando varios post pero no salen al publico, solo los nuevos post salen.

Las tablas de direcciones deben ser unidas para Basic y Extended basic, es un problema que siempre ha tenido la color computer cuando un basic hecho en un equipo con Disco o extended, y al tratar de cargarlo en un equipo con menos roms, queda muy dañado y por supuesto no corre, pienso que hay que prevenir esto y si un basic preparado para Disco, se carga en un equipo sin disco (o sin extended) debería saltar esos comandos sin mas problema. Otra solución seria ver los comando tal y como son pero colocar un aviso y no corromper todo el basic

Tabla de direcciones de entrada de funciones ($AA29 - $AA50)

Código: Seleccionar todo

1482 *
1483 * DISPATCH TABLE FOR SECONDARY FUNCTIONS
1484 * TOKENS ARE PRECEEDED BY $FF TOKEN #
1485 AA29 BC 7A LAA29 FDB SGN SGN 80
1486 AA2B BC EE FDB INT INT 81
1487 AA2D BC 93 FDB ABS ABS 82
1488 AA2F 01 12 FDB $0112 USR 83
1489 AA31 BF 1F FDB RND RND 84
1490 AA33 BF 78 FDB SIN SIN 85
1491 AA35 B7 50 FDB PEEK PEEK 86
1492 AA37 B6 81 FDB LEN LEN 87
1493 AA39 B4 FD FDB STR STR$ 88
1494 AA3B B7 16 FDB VAL VAL 89
1495 AA3D B6 A0 FDB ASC ASC 8A
1496 AA3F B6 8C FDB CHR CHR$ 8B
1497 AA41 A5 CE FDB EOF EOF 8C
1498 AA43 A9 C6 FDB JOYSTK JOYSTK 8D
1499 AA45 B6 AB FDB LEFT LEFT$ 8E
1500 AA47 B6 C8 FDB RIGHT RIGHT$ 8F
1501 AA49 B6 CF FDB MID MID$ 90
1502 AA4B A8 F5 FDB POINT POINT 91
1503 AA4D A5 64 FDB INKEY INKEY$ 92
1504 AA4F B4 EE FDB MEM MEM 93


Tabla de precedencia y entrada de funciones de signos aritméticos y lógicos ($AA51-$AA65)

Código: Seleccionar todo

1505 *
1506 * THIS TABLE CONTAINS PRECEDENCES AND DISPATCH ADDRESSES FOR ARITHMETIC
1507 * AND LOGICAL OPERATORS - THE NEGATION OPERATORS DO NOT ACT ON TWO OPERANDS
1508 * S0 THEY ARE NOT LISTED IN THIS TABLE. THEY ARE TREATED SEPARATELY IN THE
1509 * EXPRESSION EVALUATION ROUTINE. THEY ARE:
1510 * UNARY NEGATION (-), PRECEDENCE &7D AND LOGICAL NEGATION (NOT), PRECEDENCE $5A
1511 * THE RELATIONAL OPERATORS < > = ARE ALSO NOT LISTED, PRECEDENCE $64.
1512 * A PRECEDENCE VALUE OF ZERO INDICATES END OF EXPRESSION OR PARENTHESES
1513 *
1514 AA51 79 LAA51 FCB $79
1515 AA52 B9 C5 FDB LB9C5 +
1516 AA54 79 FCB $79
1517 AA55 B9 BC FDB LB9BC -
1518 AA57 7B FCB $7B
1519 AA58 BA CC FDB $BACC *
1520 AA5A 7B FCB $7B
1521 AA5B BB 91 FDB $BB91 /
1522 AA5D 7F FCB $7F
1523 AA5E 01 1D FDB $011D EXPONENTIATION
1524 AA60 50 FCB $50
1525 AA61 B2 D5 FDB $B2D5 AND
1526 AA63 46 FCB $46
1527 AA64 B2 D4 FDB LB2D4 OR


Tabla de palabras reservadas para comandos ($AA66-$AB19)

Código: Seleccionar todo

1528 *
1529 * THIS IS THE RESERVED WORD TABLE
1530 * TOKEN #
1531 AA66 46 4F D2 LAA66 FCC 'FO',$80+'R' 80
1532 AA69 47 CF FCC 'G',$80+'O' 81
1533 AA6B 52 45 CD FCC 'RE',$80+'M' 82
1534 AA6E A7 FCB '' + $80 83
1535 AA6F 45 4C 53 C5 FCC 'ELS',$80+'E' 84
1536 AA73 49 C6 FCC 'I',$80+'F' 85
1537 AA75 44 41 54 C1 FCC 'DAT',$80+'A' 86
1538 AA79 50 52 49 4E D4 FCC 'PRIN',$80+'T' 87
1539 AA7E 4F CE FCC 'O',$80+'N' 88
1540 AA80 49 4E 50 55 D4 FCC 'INPU',$80+'T' 89
1541 AA85 45 4E C4 FCC 'EN',$80+'D' 8A
1542 AA88 4E 45 58 D4 FCC 'NEX',$80+'T' 8B
1543 AA8C 44 49 CD FCC 'DI',$80+'M' 8C
1544 AA8F 52 45 41 C4 FCC 'REA',$80+'D' 8D
1545 AA93 52 55 CE FCC 'RU',$80+'N' 8E
1546 AA96 52 45 53 54 4F 52 FCC 'RESTOR',$80+'E' 8F
1547 AA9C C5
1548 AA9D 52 45 54 55 52 CE FCC 'RETUR',$80+'N' 90
1549 AAA3 53 54 4F D0 FCC 'STO',$80+'P' 91
1550 AAA7 50 4F 4B C5 FCC 'POK',$80+'E' 92
1551 AAAB 43 4F 4E D4 FCC 'CON',$80+'T' 93
1552 AAAF 4C 49 53 D4 FCC 'LIS',$80+'T' 94
1553 AAB3 43 4C 45 41 D2 FCC 'CLEA',$80+'R' 95
1554 AAB8 4E 45 D7 FCC 'NE',$80+'W' 96
1555 AABB 43 4C 4F 41 C4 FCC 'CLOA',$80+'D' 97
1556 AAC0 43 53 41 56 C5 FCC 'CSAV',$80+'E' 98
1557 AAC5 4F 50 45 CE FCC 'OPE',$80+'N' 99
1558 AAC9 43 4C 4F 53 C5 FCC 'CLOS',$80+'E' 9A
1559 AACE 4C 4C 49 53 D4 FCC 'LLIS',$80+'T' 9B
1560 AAD3 53 45 D4 FCC 'SE',$80+'T' 9C
1561 AAD6 52 45 53 45 D4 FCC 'RESE',$80+'T' 9D
1562 AADB 43 4C D3 FCC 'CL',$80+'S' 9E
1563 AADE 4D 4F 54 4F D2 FCC 'MOTO',$80+'R' 9F
1564 AAE3 53 4F 55 4E C4 FCC 'SOUN',$80+'D' A0
1565 AAE8 41 55 44 49 CF FCC 'AUDI',$80+'O' A1
1566 AAED 45 58 45 C3 FCC 'EXE',$80+'C' A2
1567 AAF1 53 4B 49 50 C6 FCC 'SKIP',$80+'F' A3
1568 AAF6 54 41 42 A8 FCC 'TAB',$80+'(' A4
1569 AAFA 54 CF FCC 'T',$80+'O' A5
1570 AAFC 53 55 C2 FCC 'SU',$80+'B' A6
1571 AAFF 54 48 45 CE FCC 'THE',$80+'N' A7
1572 AB03 4E 4F D4 FCC 'NO',$80+'T' A8
1573 AB06 53 54 45 D0 FCC 'STE',$80+'P' A9
1574 AB0A 4F 46 C6 FCC 'OF',$80+'F' AA
1575 AB0D AB FCC '+' + $80 AB
1576 AB0E AD FCB '-' + $80 AC
1577 AB0F AA FCB '*' + $80 AD
1578 AB10 AF FCB '/' + $80 AE
1579 AB11 DE FCB '^' + $80 AF
1580 AB12 41 4E C4 FCC 'AN',$80+'D' B0
1581 AB15 4F D2 FCC 'O',$80+'R' B1
1582 AB17 BE FCB '>' + $80 B2
1583 AB18 BD FCB '=' + $80 B3
1584 AB19 BC FCB '<' + $80 B4


Tabla de tokens de funciones ($AB1A-$AB66)

Código: Seleccionar todo

1585 *
1586 * TOKENS FOR THE SECONDARY FUNCTIONS ARE PRECEEDED BY $FF
1587 * TOKEN #
1588 AB1A 53 47 CE LAB1A FCC 'SG',$80+'N' 80
1589 AB1D 49 4E D4 FCC 'IN',$80+'T' 81
1590 AB20 41 42 D3 FCC 'AB',$80+'S' 82
1591 AB23 55 53 D2 FCC 'US',$80+'R' 83
1592 AB26 52 4E C4 FCC 'RN',$80+'D' 84
1593 AB29 53 49 CE FCC 'SI',$80+'N' 85
1594 AB2C 50 45 45 CB FCC 'PEE',$80+'K' 86
1595 AB30 4C 45 CE FCC 'LE',$80+'N' 87
1596 AB33 53 54 52 A4 FCC 'STR',$80+'$' 88
1597 AB37 56 41 CC FCC 'VA',$80+'L' 89
1598 AB3A 41 53 C3 FCC 'AS',$80+'C' 8A
1599 AB3D 43 48 52 A4 FCC 'CHR',$80+'$' 8B
1600 AB41 45 4F C6 FCC 'EO',$80+'F' 8C
1601 AB44 4A 4F 59 53 54 CB FCC 'JOYST',$80+'K' 8D
1602 AB4A 4C 45 46 54 A4 FCC 'LEFT',$80+'$' 8E
1603 AB4F 52 49 47 48 54 A4 FCC 'RIGHT',$80+'$' 8F
1604 AB55 4D 49 44 A4 FCC 'MID',$80+'$' 90
1605 AB59 50 4F 49 4E D4 FCC 'POIN',$80+'T' 91
1606 AB5E 49 4E 4B 45 59 A4 FCC 'INKEY',$80+'$' 92
1607 AB64 4D 45 CD FCC 'ME',$80+'M' 93


Tabla de direcciones de entrada de comandos ($AB67-$ABAE)

Código: Seleccionar todo

1608 *
1609 * DISPATCH TABLE FOR COMMANDS TOKEN #
1610 AB67 AD 47 LAB67 FDB FOR FOR 80
1611 AB69 AE 86 FDB GO GO 81
1612 AB6B AE E3 FDB REM REM 82
1613 AB6D AE E3 FDB REM REM 83
1614 AB6F AE E3 FDB REM ELSE 84
1615 AB71 AF 14 FDB IF IF 85
1616 AB73 AE E0 FDB DATA DATA 86
1617 AB75 B8 F7 FDB PRINT PRINT 87
1618 AB77 AF 42 FDB ON ON 88
1619 AB79 AF F5 FDB INPUT INPUT 89
1620 AB7B AE 02 FDB END END 8A
1621 AB7D B0 F8 FDB NEXT NEXT 8B
1622 AB7F B3 4E FDB DIM DIM 8C
1623 AB81 B0 46 FDB READ READ 8D
1624 AB83 AE 75 FDB RUN RUN 8E
1625 AB85 AD E4 FDB RESTOR RESTORE 8F
1626 AB87 AE C0 FDB RETURN RETURN 90
1627 AB89 AE 09 FDB STOP STOP 91
1628 AB8B B7 57 FDB POKE POKE 92
1629 AB8D AE 30 FDB CONT CONTINUE93
1630 AB8F B7 64 FDB LIST LIST 94
1631 AB91 AE 41 FDB CLEAR CLEAR 95
1632 AB93 AD 17 FDB NEW NEW 96
1633 AB95 A4 98 FDB CLOAD CLOAD 97
1634 AB97 A4 4C FDB CSAVE CSAVE 98
1635 AB99 A5 F6 FDB OPEN OPEN 99
1636 AB9B A4 16 FDB CLOSE CLOSE 9A
1637 AB9D B7 5E FDB LLIST LLIST 9B
1638 AB9F A8 80 FDB SET SET 9C
1639 ABA1 A8 B1 FDB RESET RESET 9D
1640 ABA3 A9 10 FDB CLS CLS 9E
1641 ABA5 A7 BD FDB MOTOR MOTOR 9F
1642 ABA7 A9 4B FDB SOUND SOUND A0
1643 ABA9 A9 90 FDB AUDIO AUDIO A1
1644 ABAB A5 3E FDB EXEC EXEC A2
1645 ABAD A5 EC FDB SKIPF SKIPF A3


Tabla de mensajes de error ($ABAF-$ABE0)

Código: Seleccionar todo

1646 *
1647 * ERROR MESSAGES AND THEIR NUMBERS AS USED INTERNALLY
1648 ABAF 4E 46 LABAF FCC 'NF' 0 NEXT WITHOUT FOR
1649 ABB1 53 4E FCC 'SN' 1 SYNTAX ERROR
1650 ABB3 52 47 FCC 'RG' 2 RETURN WITHOUT GOSUB
1651 ABB5 4F 44 FCC 'OD' 3 OUT OF DATA
1652 ABB7 46 43 FCC 'FC' 4 ILLEGAL FUNCTION CALL
1653 ABB9 4F 56 FCC 'OV' 5 OVERFLOW
1654 ABBB 4F 4D FCC 'OM' 6 OUT OF MEMORY
1655 ABBD 55 4C FCC 'UL' 7 UNDEFINED LINE NUMBER
1656 ABBF 42 53 FCC 'BS' 8 BAD SUBSCRIPT
1657 ABC1 44 44 FCC 'DD' 9 REDIMENSIONED ARRAY
1658 ABC3 2F 30 FCC '/0' 10 DIVISION BY ZERO
1659 ABC5 49 44 FCC 'ID' 11 ILLEGAL DIRECT STATEMENT
1660 ABC7 54 4D FCC 'TM' 12 TYPE MISMATCH
1661 ABC9 4F 53 FCC 'OS' 13 OUT OF STRING SPACE
1662 ABCB 4C 53 FCC 'LS' 14 STRING TOO LONG
1663 ABCD 53 54 FCC 'ST' 15 STRING FORMULA TOO COMPLEX
1664 ABCF 43 4E FCC 'CN' 16 CAN'T CONTINUE
1665 ABD1 46 44 FCC 'FD' 17 BAD FILE DATA
1666 ABD3 41 4F FCC 'AO' 18 FILE ALREADY OPEN
1667 ABD5 44 4E FCC 'DN' 19 DEVICE NUMBER ERROR
1668 ABD7 49 4F FCC 'IO' 20 I/O ERROR
1669 ABD9 46 4D FCC 'FM' 21 BAD FILE MODE
1670 ABDB 4E 4F FCC 'NO' 22 FILE NOT OPEN
1671 ABDD 49 45 FCC 'IE' 23 INPUT PAST END OF FILE
1672 ABDF 44 53 FCC 'DS' 24 DIRECT STATEMENT IN FILE


Textos de error ($ABE1-$ABF8)

Código: Seleccionar todo

1673
1674 ABE1 20 45 52 52 4F 52 LABE1 FCC ' ERROR'
1675 ABE7 00 FCB $00
1676 ABE8 20 49 4E 20 LABE8 FCC ' IN '
1677 ABEC 00 FCB $00
1678 ABED 0D LABED FCB CR
1679 ABEE 4F 4B LABEE FCC 'OK'
1680 ABF0 0D 00 FCB CR,$00
1681 ABF2 0D LABF2 FCB CR
1682 ABF3 42 52 45 41 4B FCC 'BREAK'
1683 ABF8 00 FCB $00

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:23

Busca en stack por FOR y GOSUB ($ABF9-$AC1D)

Código: Seleccionar todo

1684 * SEARCH THE STACK FOR ‘GOSUB/RETURN’ OR ‘FOR/NEXT’ DATA.
1685 * THE ‘FOR/NEXT’ INDEX VARIABLE DESCRIPTOR ADDRESS BEING
1686 * SOUGHT IS STORED IN VARDES. EACH BLOCK OF FOR/NEXT DATA IS 18
1687 * BYTES WITH A $80 LEADER BYTE AND THE GOSUB/RETURN DATA IS 5 BYTES
1688 * WITH AN $A6 LEADER BYTE. THE FIRST NON "FOR/NEXT" DATA
1689 * IS CONSIDERED ‘GOSUB/RETURN’
1690 ABF9 30 64 LABF9 LEAX 4,S POINT X TO 3RD ADDRESS ON STACK - IGNORE THE
1691 * FIRST TWO RETURN ADDRESSES ON THE STACK
1692 ABFB C6 12 LABFB LDB #18 18 BYTES SAVED ON STACK FOR EACH ‘FOR’ LOOP
1693 ABFD 9F 0F STX TEMPTR SAVE POINTER
1694 ABFF A6 84 LDA ,X GET 1ST BYTE
1695 AC01 80 80 SUBA #$80 * CHECK FOR TYPE OF STACK JUMP FOUND
1696 AC03 26 15 BNE LAC1A * BRANCH IF NOT ‘FOR/NEXT’
1697 AC05 AE 01 LDX 1,X = GET INDEX VARIABLE DESCRIPTOR
1698 AC07 9F 11 STX TMPTR1 = POINTER AND SAVE IT IN TMPTR1
1699 AC09 9E 3B LDX VARDES GET INDEX VARIABLE BEING SEARCHED FOR
1700 AC0B 27 09 BEQ LAC16 BRANCH IF DEFAULT INDEX VARIABLE - USE THE
1701 * FIRST ‘FOR/NEXT’ DATA FOUND ON STACK
1702 * IF NO INDEX VARIABLE AFTER ‘NEXT’
1703 AC0D 9C 11 CMPX TMPTR1 DOES THE STACK INDEX MATCH THE ONE
1704 * BEING SEARCHED FOR?
1705 AC0F 27 09 BEQ LAC1A YES
1706 AC11 9E 0F LDX TEMPTR * RESTORE INITIAL POINTER, ADD
1707 AC13 3A ABX * 18 TO IT AND LOOK FOR
1708 AC14 20 E5 BRA LABFB * NEXT BLOCK OF DATA
1709 AC16 9E 11 LAC16 LDX TMPTR1 = GET 1ST INDEX VARIABLE FOUND AND
1710 AC18 9F 3B STX VARDES = SAVE AS ‘NEXT’ INDEX
1711 AC1A 9E 0F LAC1A LDX TEMPTR POINT X TO START OF ‘FOR/NEXT’ DATA
1712 AC1C 4D TSTA SET ZERO FLAG IF ‘FOR/NEXT’ DATA
1713 AC1D 39 RTS

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:29

Chequeo de memoria para array y los mueve ($AC1E-$AC32)

Código: Seleccionar todo

1714 * CHECK FOR MEMORY SPACE FOR NEW TOP OF
1715 * ARRAYS AND MOVE ARRAYS TO NEW LOCATION
1716 AC1E 8D 17 LAC1E BSR LAC37 ACCD = NEW BOTTOM OF FREE RAM - IS THERE
1717 * ROOM FOR THE STACK?
1718 * MOVE BYTES FROM V43(X) TO V41(U) UNTIL (X) = V47 AND
1719 * SAVE FINAL VALUE OF U IN V45
1720 AC20 DE 41 LAC20 LDU V41 POINT U TO DESTINATION ADDRESS (V41)
1721 AC22 33 41 LEAU 1,U ADD ONE TO U - COMPENSATE FOR FIRST PSHU
1722 AC24 9E 43 LDX V43 POINT X TO SOURCE ADDRESS (V43)
1723 AC26 30 01 LEAX 1,X ADD ONE - COMPENSATE FOR FIRST LDA ,X
1724 AC28 A6 82 LAC28 LDA ,-X GRAB A BYTE FROM SOURCE
1725 AC2A 36 02 PSHU A MOVE IT TO DESTINATION
1726 AC2C 9C 47 CMPX V47 DONE?
1727 AC2E 26 F8 BNE LAC28 NO - KEEP MOVING BYTES
1728 AC30 DF 45 STU V45 SAVE FINAL DESTINATION ADDRESS
1729 AC32 39 LAC32 RTS

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:31

Chequeo para ver si hay cupo para almacenar 2*ACCB ($AC33-$AC45)

Código: Seleccionar todo

1730 * CHECK TO SEE IF THERE IS ROOM TO STORE 2*ACCB
1731 * BYTES IN FREE RAM - OM ERROR IF NOT
1732 AC33 4F LAC33 CLRA * ACCD CONTAINS NUMBER OF EXTRA
1733 AC34 58 ASLB * BYTES TO PUT ON STACK
1734 AC35 D3 1F ADDD ARYEND END OF PROGRAM AND VARIABLES
1735 AC37 C3 00 3A LAC37 ADDD #STKBUF ADD STACK BUFFER - ROOM FOR STACK?
1736 AC3A 25 08 BCS LAC44 BRANCH IF GREATER THAN $FFFF
1737 AC3C 10 DF 17 STS BOTSTK CURRENT NEW BOTTOM OF STACK STACK POINTER
1738 AC3F 10 93 17 CMPD BOTSTK ARE WE GOING TO BE BELOW STACK?
1739 AC42 25 EE BCS LAC32 YES - NO ERROR
1740 AC44 C6 0C LAC44 LDB #6*2 OUT OF MEMORY ERROR

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:32

Rutina de errores ($AC46-$AC72)

Código: Seleccionar todo

1741
1742 * ERROR SERVICING ROUTINE
1743 AC46 BD 01 8E LAC46 JSR RVEC16 HOOK INTO RAM
1744 AC49 BD 01 91 JSR RVEC17 HOOK INTO RAM
1745 AC4C BD A7 E9 JSR LA7E9 TURN OFF CASSETTE
1746 AC4F BD A9 74 JSR LA974 DISABLE ANA MUX
1747 AC52 BD AD 33 JSR LAD33 RESET STACK, STRING STACK, CONTINUE POINTER
1748 AC55 0F 6F CLR DEVNUM SET DEVICE NUMBER TO SCREEN
1749 AC57 BD B9 5C JSR LB95C SEND A CR TO SCREEN
1750 AC5A BD B9 AF JSR LB9AF SEND A ‘?‘ TO SCREEN
1751 AC5D 8E AB AF LDX #LABAF POINT TO ERROR TABLE
1752 AC60 3A ABX ADD MESSAGE NUMBER OFFSET
1753 AC61 8D 3D BSR LACA0 * GET TWO CHARACTERS FROM X AND
1754 AC63 8D 3B BSR LACA0 * SEND TO CONSOLE OUT (SCREEN)
1755 AC65 8E AB E0 LDX #LABE1-1 POINT TO "ERROR" MESSAGE
1756 AC68 BD B9 9C LAC68 JSR LB99C PRINT MESSAGE POINTED TO BY X
1757 AC6B 96 68 LDA CURLIN GET CURRENT LINE NUMBER (CURL IN)
1758 AC6D 4C INCA TEST FOR DIRECT MODE
1759 AC6E 27 03 BEQ LAC73 BRANCH IF DIRECT MODE
1760 AC70 BD BD C5 JSR LBDC5 PRINT ‘IN ****‘

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:34

RUTINA PRINCIPAL DEL BASIC EN MODO DIRECTO ($AC73-$ACA4)

Código: Seleccionar todo

1761
1762 * THIS IS THE MAIN LOOP OF BASIC WHEN IN DIRECT MODE
1763 AC73 BD B9 5C LAC73 JSR LB95C MOVE CURSOR TO START OF LINE
1764 AC76 8E AB ED LDX #LABE1-1 POINT X TO ‘OK’, CR MESSAGE
1765 AC79 BD B9 9C JSR LB99C PRINT ‘OK’, CR
1766 AC7C BD A3 90 LAC7C JSR LA390 GO GET AN INPUT LINE
1767 AC7F CE FF FF LDU #FFFF THE LINE NUMBER FOR DIRECT MODE IS $FFFF
1768 AC82 DF 68 STU CURLIN SAVE IT IN CURLIN
1769 AC84 25 F6 BCS LAC7C BRANCH IF LINE INPUT TERMINATED BY BREAK
1770 AC86 0D 70 TST CINBFL CHECK CONSOLE INPUT BUFFER STATUS
1771 AC88 10 26 F8 33 LBNE LA4BF BRANCH IF BUFFER EMPTY - CLOSE FILE IF EMPTY
1772 AC8C 9F A6 STX CHARAD SAVE (X) AS CURRENT INPUT POINTER - THIS WILL
1773 * ENABLE THE ‘LIVE KEYBOARD’ (DIRECT) MODE. THE
1774 * LINE JUST ENTERED WILL BE INTERPRETED
1775 AC8E 9D 9F JSR GETNCH GET NEXT CHARACTER FROM BASIC
1776 AC90 27 EA BEQ LAC7C NO LINE INPUT - GET ANOTHER LINE
1777 AC92 25 11 BCS LACA5 BRANCH IF NUMER1C - THERE WAS A LINE NUMBER BEFORE
1778 * THE STATEMENT ENTERED, SO THIS STATEMENT
1779 * WILL BE MERGED INTO THE BASIC PROGRAM
1780 AC94 C6 30 LDB #2*24 ‘DIRECT STATEMENT IN FILE’ ERROR
1781 AC96 0D 6F TST DEVNUM * CHECK DEVICE NUMBER AND
1782 AC98 26 AC BNE LAC46 * ISSUE ‘DS’ ERROR IF DEVNUM <> 0
1783 AC9A BD B8 21 JSR LB821 GO CRUNCH LINE
1784 AC9D 7E AD C0 JMP LADC0 GO EXECUTE THE STATEMENT (LIVE KEYBOARD)
1785 *
1786 ACA0 A6 80 LACA0 LDA ,X+ GET A CHARACTER
1787 ACA2 7E B9 B1 JMP LB9B1 SEND TO CONSOLE OUT

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:36

Insertar linea de basic ($ACA5-$ACBF)

Código: Seleccionar todo

1788 * TAKE A LINE FROM THE LINE INPUT BUFFER
1789 * AND INSERT IT INTO THE BASIC PROGRAM
1790 ACA5 BD AF 67 LACA5 JSR LAF67 CONVERT LINE NUMBER TO BINARY
1791 ACA8 9E 2B LDX BINVAL GET CONVERTED LINE NUMBER
1792 ACAA BF 02 DA STX LINHDR STORE IT IN LINE INPUT HEADER
1793 ACAD BD B8 21 JSR LB821 GO CRUNCH THE LINE
1794 ACB0 D7 03 STB TMPLOC SAVE LINE LENGTH
1795 ACB2 8D 4D BSR LAD01 FIND OUT WHERE TO INSERT LINE
1796 ACB4 25 12 BCS LACC8 BRANCH IF LINE NUMBER DOES NOT ALREADY EXIST
1797 ACB6 DC 47 LDD V47 GET ABSOLUTE ADDRESS OF LINE NUMBER
1798 ACB8 A3 84 SUBD ,X SUBTRACT ADDRESS OF NEXT LINE NUMBER
1799 ACBA D3 1B ADDD VARTAB * ADD TO CURRENT END OF PROGRAM - THIS WILL REMOVE
1800 ACBC DD 1B STD VARTAB * THE LENGTH OF THIS LINE NUMBER FROM THE PROGRAM
1801 ACBE EE 84 LDU ,X POINT U TO ADDRESS OF NEXT LINE NUMBER

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:37

Borrar linea de basic ($ACC0-$ACEE)

Código: Seleccionar todo

1802 * DELETE OLD LINE FROM BASIC PROGRAM
1803 ACC0 37 02 LACC0 PULU A GET A BYTE FROM WHAT’S LEFT OF PROGRAM
1804 ACC2 A7 80 STA ,X+ MOVE IT DOWN
1805 ACC4 9C 1B CMPX VARTAB COMPARE TO END OF BASIC PROGRAM
1806 ACC6 26 F8 BNE LACC0 BRANCH IF NOT AT END
1807 ACC8 B6 02 DC LACC8 LDA LINBUF * CHECK TO SEE IF THERE IS A LINE IN
1808 ACCB 27 1C BEQ LACE9 * THE BUFFER AND BRANCH IF NONE
1809 ACCD DC 1B LDD VARTAB = SAVE CURRENT END OF
1810 ACCF DD 43 STD V43 = PROGRAM IN V43
1811 ACD1 DB 03 ADDB TMPLOC * ADD LENGTH OF CRUNCHED LINE,
1812 ACD3 89 00 ADCA #0 * PROPOGATE CARRY AND SAVE NEW END
1813 ACD5 DD 41 STD V41 * OF PROGRAM IN V41
1814 ACD7 BD AC 1E JSR LAC1E = MAKE SURE THERE’S ENOUGH RAM FOR THIS
1815 * = LINE & MAKE A HOLE IN BASIC FOR NEW LINE
1816 ACDA CE 02 D8 LDU #LINHDR-2 POINT U TO LINE TO BE INSERTED
1817 ACDD 37 02 LACDD PULU A GET A BYTE FROM NEW LINE
1818 ACDF A7 80 STA ,X+ INSERT IT IN PROGRAM
1819 ACE1 9C 45 CMPX V45 * COMPARE TO ADDRESS OF END OF INSERTED
1820 ACE3 26 F8 BNE LACDD * LINE AND BRANCH IF NOT DONE
1821 ACE5 9E 41 LDX V41 = GET AND SAVE
1822 ACE7 9F 1B STX VARTAB = END OF PROGRAM
1823 ACE9 8D 36 LACE9 BSR LAD21 RESET INPUT POINTER, CLEAR VARIABLES, INITIALIZE
1824 ACEB 8D 02 BSR LACEF ADJUST START OF NEXT LINE ADDRESSES
1825 ACED 20 8D BRA LAC7C REENTER BASIC’S INPUT LOOP

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:38

Computa dirección de inicio de la próxima linea ($ACEF-$AD00)

Código: Seleccionar todo

1826 * COMPUTE THE START OF NEXT LINE ADDRESSES FOR THE BASIC PROGRAM
1827 ACEF 9E 19 LACEF LDX TXTTAB POINT X TO START OF PROGRAM
1828 ACF1 EC 84 LACF1 LDD ,X GET ADDRESS OF NEXT LINE
1829 ACF3 27 21 BEQ LAD16 RETURN IF END OF PROGRAM
1830 ACF5 33 04 LEAU 4,X POINT U TO START OF BASIC TEXT IN LINE
1831 ACF7 A6 C0 LACF7 LDA ,U+ * SKIP THROUGH THE LINE UNTIL A
1832 ACF9 26 FC BNE LACF7 * ZERO (END OF LINE) IS FOUND
1833 ACFB EF 84 STU ,X SAVE THE NEW START OF NEXT LINE ADDRESS
1834 ACFD AE 84 LDX ,X POINT X TO START OF NEXT LINE
1835 ACFF 20 F0 BRA LACF1 KEEP GOING

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:40

Encuentra linea de Basic ($AD01-$AD16)

Código: Seleccionar todo

1836 *
1837 * FIND A LINE NUMBER IN THE BASIC PROGRAM
1838 * RETURN WITH CARRY SET IF NO MATCH FOUND
1839 AD01 DC 2B LAD01 LDD BINVAL GET THE LINE NUMBER TO FIND
1840 AD03 9E 19 LDX TXTTAB BEGINNING OF PROGRAM
1841 AD05 EE 84 LAD05 LDU ,X GET ADDRESS OF NEXT LINE NUMBER
1842 AD07 27 09 BEQ LAD12 BRANCH IF END OF PROG
1843 AD09 10 A3 02 CMPD 2,X IS IT A MATCH?
1844 AD0C 23 06 BLS LAD14 CARRY SET IF LOWER; CARRY CLEAR IF MATCH
1845 AD0E AE 84 LDX ,X X = ADDRESS OF NEXT LINE
1846 AD10 20 F3 BRA LAD05 KEEP LOOPING FOR LINE NUMBER
1847 AD12 1A 01 LAD12 ORCC #1 SET CARRY FLAG
1848 AD14 9F 47 LAD14 STX V47 SAVE MATCH LINE NUMBER OR NUMBER OF LINE JUST AFTER
1849 WHERE IT SHOULD HAVE BEEN
1850 AD16 39 LAD16 RTS

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:42

Comando NEW ($AD17-$AD25)

Código: Seleccionar todo

1851
1852 * NEW
1853 AD17 26 FB NEW BNE LAD14 BRANCH IF ARGUMENT GIVEN
1854 AD19 9E 19 LAD19 LDX TXTTAB GET START OF BASIC
1855 AD1B 6F 80 CLR ,X+ * PUT 2 ZERO BYTES THERE - ERASE
1856 AD1D 6F 80 CLR ,X+ * THE BASIC PROGRAM
1857 AD1F 9F 1B STX VARTAB AND THE NEXT ADDRESS IS NOW THE END OF PROGRAM
1858 AD21 9E 19 LAD21 LDX TXTTAB GET START OF BASIC
1859 AD23 BD AE BB JSR LAEBB PUT INPUT POINTER ONE BEFORE START OF BASIC


Borrar variables ($AD26-$AD46)

Código: Seleccionar todo

1860 * ERASE ALL VARIABLES
1861 AD26 9E 27 LAD26 LDX MEMSIZ * RESET START OF STRING VARIABLES
1862 AD28 9F 23 STX STRTAB * TO TOP OF STRING SPACE
1863 AD2A BD AD E4 JSR RESTOR RESET ‘DATA’ POINTER TO START OF BASIC
1864 AD2D 9E 1B LDX VARTAB * GET START OF VARIABLES AND USE IT
1865 AD2F 9F 1D STX ARYTAB * TO RESET START OF ARRAYS
1866 AD31 9F 1F STX ARYEND RESET END OF ARRAYS
1867 AD33 8E 01 A9 LAD33 LDX #STRSTK * RESET STRING STACK POINTER TO
1868 AD36 9F 0B STX TEMPPT * BOTTOM OF STRING STACK
1869 AD38 AE E4 LDX ,S GET RETURN ADDRESS OFF STACK
1870 AD3A 10 DE 21 LDS FRETOP RESTORE STACK POINTER
1871 AD3D 6F E2 CLR ,-S PUT A ZERO BYTE ON STACK - TO CLEAR ANY RETURN OF
1872 * FOR/NEXT DATA FROM THE STACK
1873 AD3F 0F 2D CLR OLDPTR RESET ‘CONT’ ADDRESS SO YOU
1874 AD41 0F 2E CLR OLDPTR+1 ‘CAN’T CONTINUE’
1875 AD43 0F 08 CLR ARYDIS CLEAR THE ARRAY DISABLE FLAG
1876 AD45 6E 84 JMP ,X RETURN TO CALLING ROUTINE - THIS IS NECESSARY
1877 * SINCE THE STACK WAS RESET

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:45

Comando FOR ($AD47-$AD9D)

Código: Seleccionar todo

1878 *
1879 * FOR
1880 *
1881 * THE FOR COMMAND WILL STORE 18 BYTES ON THE STACK FOR
1882 * EACH FOR-NEXT LOOP WHICH IS BEING PROCESSED. THESE
1883 * BYTES ARE DEFINED AS FOLLOWS: 0- $80 (FOR FLAG);
1884 * 1,2=INDEX VARIABLE DESCRIPTOR POINTER; 3-7=FP VALUE OF STEP;
1885 * 8=STEP DIRECTION: $FF IF NEGATIVE; 0 IF ZERO; 1 IF POSITIVE;
1886 * 9-13=FP VALUE OF ‘TO’ PARAMETER;
1887 * 14,15=CURRENT LINE NUMBER; 16,17=RAM ADDRESS OF THE END
1888 * OF THE LINE CONTAINING THE ‘FOR’ STATEMENT
1889 AD47 86 80 FOR LDA #$80 * SAVE THE DISABLE ARRAY FLAG IN VO8
1890 AD49 97 08 STA ARYDIS * DO NOT ALLOW THE INDEX VARIABLE TO BE AN ARRAY
1891 AD4B BD AF 89 JSR LET SET INDEX VARIABLE TO INITIAL VALUE
1892 AD4E BD AB F9 JSR LABF9 SEARCH THE STACK FOR ‘FOR/NEXT’ DATA
1893 AD51 32 62 LEAS 2,S PURGE RETURN ADDRESS OFF OF THE STACK
1894 AD53 26 04 BNE LAD59 BRANCH IF INDEX VARIABLE NOT ALREADY BEING USED
1895 AD55 9E 0F LDX TEMPTR GET (ADDRESS + 18) OF MATCHED ‘FOR/NEXT’ DATA
1896 AD57 32 85 LEAS B,X MOVE THE STACK POINTER TO THE BEGINNING OF THE
1897 * MATCHED ‘FOR/NEXT’ DATA SO THE NEW DATA WILL
1898 * OVERLAY THE OLD DATA. THIS WILL ALSO DESTROY
1899 * ALL OF THE ‘RETURN’ AND ‘FOR/NEXT’ DATA BELOW
1900 * THIS POINT ON THE STACK
1901 AD59 C6 09 LAD59 LDB #$09 * CHECK FOR ROOM FOR 18 BYTES
1902 AD5B BD AC 33 JSR LAC33 * IN FREE RAM
1903 AD5E BD AE E8 JSR LAEE8 GET ADDR OF END OF SUBLINE IN X
1904 AD61 DC 68 LDD CURLIN GET CURRENT LINE NUMBER
1905 AD63 34 16 PSHS X,B,A SAVE LINE ADDR AND LINE NUMBER ON STACK
1906 AD65 C6 A5 LDB #$A5 TOKEN FOR ‘TO’
1907 AD67 BD B2 6F JSR LB26F SYNTAX CHECK FOR ‘TO’
1908 AD6A BD B1 43 JSR LB143 ‘TM’ ERROR IF INDEX VARIABLE SET TO STRING
1909 AD6D BD B1 41 JSR LB141 EVALUATE EXPRESSION
1910 *
1911 AD70 D6 54 LDB FP0SGN GET FPA0 MANTISSA SIGN
1912 AD72 CA 7F ORB #$7F FORM A MASK TO SAVE DATA BITS OF HIGH ORDER MANTISSA
1913 AD74 D4 50 ANDB FPA0 PUT THE MANTISSA SIGN IN BIT 7 OF HIGH ORDER MANTISSA
1914 AD76 D7 50 STB FPA0 SAVE THE PACKED HIGH ORDER MANTISSA
1915 AD78 10 8E AD 7F LDY #LAD7F LOAD FOLLOWING ADDRESS INTO Y AS A RETURN
1916 AD7C 7E B1 EA JMP LB1EA ADDRESS - PUSH FPA0 ONTO THE STACK
1917 AD7F 8E BA C5 LAD7F LDX #LBAC5 POINT X TO FLOATING POINT NUMBER 1.0 (DEFAULT STEP VALUE)
1918 AD82 BD BC 14 JSR LBC14 MOVE (X) TO FPA0
1919 AD85 9D A5 JSR GETCCH GET CURRENT INPUT CHARACTER
1920 AD87 81 A9 CMPA #$A9 STEP TOKEN
1921 AD89 26 05 BNE LAD90 BRANCH IF NO ‘STEP’ VALUE
1922 AD8B 9D 9F JSR GETNCH GET A CHARACTER FROM BASIC
1923 AD8D BD B1 41 JSR LB141 EVALUATE NUMERIC EXPRESSION
1924 AD90 BD BC 6D LAD90 JSR LBC6D CHECK STATUS OF FPA0
1925 AD93 BD B1 E6 JSR LB1E6 SAVE STATUS AND FPA0 ON THE STACK
1926 AD96 DC 3B LDD VARDES * GET DESCRIPTOR POINTER FOR THE ‘STEP’
1927 AD98 34 06 PSHS B,A * VARIABLE AND SAVE IT ON THE STACK
1928 AD9A 86 80 LDA #$80 = GET THE ‘FOR’ FLAG AND
1929 AD9C 34 02 PSHS A = SAVE IT ON THE STACK

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 01:48

RUTINA PRINCIPAL DEL INTERPRETE DE COMANDOS ($AD9E-$ADD9)

Código: Seleccionar todo

1930 *
1931 * MAIN COMMAND INTERPRETATION LOOP
1932 AD9E BD 01 9A LAD9E JSR RVEC20 HOOK INTO RAM
1933 ADA1 1C AF ANDCC #$AF ENABLE IRQ,FIRQ
1934 ADA3 8D 46 BSR LADEB CHECK FOR KEYBOARD BREAK
1935 ADA5 9E A6 LDX CHARAD GET BASIC’S INPUT POINTER
1936 ADA7 9F 2F STX TINPTR SAVE IT
1937 ADA9 A6 80 LDA ,X+ GET CURRENT INPUT CHAR & MOVE POINTER
1938 ADAB 27 07 BEQ LADB4 BRANCH IF END OF LINE
1939 ADAD 81 3A CMPA #': CHECK FOR LINE SEPARATOR
1940 ADAF 27 0F BEQ LADC0 BRANCH IF COLON
1941 ADB1 7E B2 77 LADB1 JMP LB277 ‘SYNTAX ERROR’-IF NOT LINE SEPARATOR
1942 ADB4 A6 81 LADB4 LDA ,X++ GET MS BYTE OF ADDRESS OF NEXT BASIC LINE
1943 ADB6 97 00 STA ENDFLG SAVE IN STOP/END FLAG - CAUSE A STOP IF
1944 * NEXT LINE ADDRESS IS < $8000; CAUSE
1945 * AN END IF ADDRESS > $8000
1946 ADB8 27 5B BEQ LAE15 BRANCH TO ‘STOP’ - END OF PROGRAM
1947 ADBA EC 80 LDD ,X+ GET CURRENT LINE NUMBER
1948 ADBC DD 68 STD CURLIN SAVE IN CURLIN
1949 ADBE 9F A6 STX CHARAD SAVE ADDRESS OF FIRST BYTE OF LINE
1950 ADC0 9D 9F LADC0 JSR GETNCH GET A CHARACTER FROM BASIC
1951 ADC2 8D 02 BSR LADC6 GO PROCESS COMMAND
1952 ADC4 20 D8 BRA LAD9E GO BACK TO MAIN LOOP
1953 ADC6 27 78 LADC6 BEQ LAE40 RETURN IF END OF LINE
1954 ADC8 4D TSTA CHECK FOR TOKEN - BIT 7 SET (NEGATIVE)
1955 ADC9 10 2A 01 BC LBPL LET BRANCH IF NOT A TOKEN - GO DO A ‘LET’ WHICH
1956 * IS THE ‘DEFAULT’ TOKEN FOR MICROSOFT BASIC
1957 ADCD 81 A3 CMPA #$A3 SKIPF TOKEN - HIGHEST EXECUTABLE COMMAND IN BASIC
1958 ADCF 22 0B BHI LADDC BRANCH IF > A BASIC COMMAND
1959 ADD1 BE 01 23 LDX COMVEC+3 GET ADDRESS OF BASIC’S COMMAND TABLE
1960 ADD4 48 LADD4 ASLA X2 (2 BYTE/JUMP ADDRESS) & DISCARD BIT 7
1961 ADD5 1F 89 TFR A,B SAVE COMMAND OFFSET IN ACCB
1962 ADD7 3A ABX NON X POINTS TO COMMAND JUMP ADDR
1963 ADD8 9D 9F JSR GETNCH GET AN INPUT CHAR


Código: Seleccionar todo

1964 *
1965 * HERE IS WHERE WE BRANCH TO DO A ‘COMMAND’
1966 ADDA 6E 94 JMP [,X] GO DO A COMMAND
1967 ADDC 81 B4 LADDC CMPA #$B4 $B4 IS HIGHEST BASIC TOKEN
1968 ADDE 23 D1 BLS LADB1 ‘SYNTAX ERROR’ IF NON-EXECUTABLE TOKEN
1969 ADE0 6E 9F 01 2D JMP [COMVEC+13] JUMP TO AN EX BAS COMMAND

Avatar de Usuario
luiscoco
Mensajes: 2376
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 34 veces
Agradecimiento recibido: 47 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 11 Feb 2019 04:31

Comando RESTORE ($ADE4-$ADEA)

Código: Seleccionar todo

1970 *
1971 * RESTORE
1972 ADE4 9E 19 RESTOR LDX TXTTAB BEGINNING OF PROGRAM ADDRESS
1973 ADE6 30 1F LEAX -1,X MOVE TO ONE BYTE BEFORE PROGRAM
1974 ADE8 9F 33 LADE8 STX DATPTR SAVE NEW DATA POINTER
1975 ADEA 39 RTS


Volver a “Tandy CoCo”

¿Quién está conectado?

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