Nuevo proyecto Basic CoCo/Dragon/DP400

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 04:40

Último mensaje de la página anterior:

Función ASC$ ($B6A0-$B6AA)

Código: Seleccionar todo

3284 * ASC$
3285 B6A0 8D 02 ASC BSR LB6A4 PUT 1ST CHARACTER OF STRING INTO ACCB
3286 B6A2 20 DF BRA LB683 CONVERT ACCB INTO FP NUMBER IN FPA0
3287 B6A4 8D E0 LB6A4 BSR LB686 POINT X TO STRING DESCRIPTOR
3288 B6A6 27 5E BEQ LB706 'FC' ERROR IF NULL STRING
3289 B6A8 E6 84 LDB ,X GET FIRST BYTE OF STRING
3290 B6AA 39 RTS

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 04:46

Función LEFT$($B6AB-$B6C7)

Código: Seleccionar todo

3291
3292 * LEFT$
3293 B6AB 8D 48 LEFT BSR LB6F5 GET ARGUMENTS FROM STACK
3294 B6AD 4F CLRA CLEAR STRING POINTER OFFSET - OFFSET = 0 FOR LEFT$
3295 B6AE E1 84 LB6AE CMPB ,X * COMPARE LENGTH PARAMETER TO LENGTH OF
3296 B6B0 23 03 BLS LB6B5 * STRING AND BRANCH IF LENGTH OF STRING
3297 * >= LENGTH PARAMETER
3298 B6B2 E6 84 LDB ,X USE LENGTH OF STRING OTHERWISE
3299 B6B4 4F CLRA CLEAR STRING POINTER OFFSET (0 FOR LEFT$)
3300 B6B5 34 06 LB6B5 PSHS B,A PUSH PARAMETERS ONTO STACK
3301 B6B7 BD B5 0F JSR LB50F RESERVE ACCB BYTES IN THE STRING SPACE
3302 B6BA 9E 4D LDX V4D POINT X TO STRING DESCRIPTOR
3303 B6BC 8D 9B BSR LB659 GET ADDRESS OF OLD STRING (X=ADDRESS)
3304 B6BE 35 04 PULS B * PULL STRING POINTER OFFSET OFF OF THE STACK
3305 B6C0 3A ABX * AND ADD IT TO STRING ADDRESS
3306 B6C1 35 04 PULS B PULL LENGTH PARAMETER OFF OF THE STACK
3307 B6C3 BD B6 45 JSR LB645 MOVE ACCB BYTES FROM (X) TO [FRESPC]
3308 B6C6 20 D5 BRA LB69D PUT TEMP STRING DESCRIPTOR ONTO THE STRING STACK

Función RIGHT$ ($B6C8-$B6CE)

Código: Seleccionar todo

3309
3310 * RIGHT$
3311 B6C8 8D 2B RIGHT BSR LB6F5 GET ARGUMENTS FROM STACK
3312 B6CA A0 84 SUBA ,X ACCA=LENGTH PARAMETER - LENGTH OF OLD STRING
3313 B6CC 40 NEGA NOW ACCA = LENGTH OF OLD STRING
3314 B6CD 20 DF BRA LB6AE PUT NEW STRING IN THE STRING SPACE


Función MID$ ($B6CF-$B6F4)

Código: Seleccionar todo

3315
3316 * MID$
3317 B6CF C6 FF MID LDB #$FF * GET DEFAULT VALUE OF LENGTH AND
3318 B6D1 D7 53 STB FPA0+3 * SAVE IT IN FPA0
3319 B6D3 9D A5 JSR GETCCH GET CURRENT CHARACTER FROM BASIC
3320 B6D5 81 29 CMPA #') ARGUMENT DELIMITER?
3321 B6D7 27 05 BEQ LB6DE YES - NO LENGTH PARAMETER GIVEN
3322 B6D9 BD B2 6D JSR LB26D SYNTAX CHECK FOR COMMA
3323 B6DC 8D 2D BSR LB70B EVALUATE NUMERIC EXPRESSION (LENGTH)
3324 B6DE 8D 15 LB6DE BSR LB6F5 GET ARGUMENTS FROM STACK
3325 B6E0 27 24 BEQ LB706 'FC' ERROR IF NULL STRING
3326 B6E2 5F CLRB CLEAR LENGTH COUNTER (DEFAULT VALUE)
3327 B6E3 4A DECA *SUOTRACT ONE FROM POSITION PARAMETER (THESE
3328 B6E4 A1 84 CMPA ,X *ROUTINES EXPECT 1ST POSITION TO BE ZERO, NOT ONE)
3329 * *AND COMPARE IT TO LENGTH OF OLD STRING
3330 B6E6 24 CD BCC LB6B5 IF POSITION > LENGTH OF OLD STRING, THEN NEW
3331 * STRING WILL BE A NULL STRING
3332 B6E8 1F 89 TFR A,B SAVE ABSOLUTE POSITION PARAMETER IN ACCB
3333 B6EA E0 84 SUBB ,X ACCB=POSITION-LENGTH OF OLD STRING
3334 B6EC 50 NEGB NOW ACCB=LENGTH OF OLDSTRING-POSITION
3335 B6ED D1 53 CMPB FPA0+3 *IF THE AMOUNT OF OLD STRING TO THE RIGHT OF
3336 B6EF 23 C4 BLS LB6B5 *POSITION IS <= THE LENGTH PARAMETER, BRANCH AND
3337 *USE ALL OF THE STRING TO THE RIGHT OF THE POSITION
3338 *INSTEAD OF THE LENGTH PARAMETER
3339 B6F1 D6 53 LDB FPA0+3 GET LENGTH OF NEW STRING
3340 B6F3 20 C0 BRA LB6B5 PUT NEW STRING IN STRING SPACE

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 04:47

Hace un chequeo de sintaxis para ")" ($B6F5-$B708)

Código: Seleccionar todo

3341 * DO A SYNTAX CHECK FOR ")", THEN PULL THE PREVIOUSLY CALCULATED NUMERIC
3342 * ARGUMENT (ACCD) AND STRING ARGUMENT DESCRIPTOR ADDR OFF OF THE STACK
3343 B6F5 BD B2 67 LB6F5 JSR LB267 SYNTAX CHECK FOR A ")"
3344 B6F8 EE E4 LDU ,S LOAD THE RETURN ADDRESS INTO U REGISTER
3345 B6FA AE 65 LDX 5,S * GET ADDRESS OF STRING AND
3346 B6FC 9F 4D STX V4D * SAVE IT IN V4D
3347 B6FE A6 64 LDA 4,S = PUT LENGTH OF STRING IN
3348 B700 E6 64 LDB 4,S = BOTH ACCA AND ACCB
3349 B702 32 67 LEAS 7,S REMOVE DESCRIPTOR AND RETURN ADDRESS FROM STACK
3350 B704 1F 35 TFR U,PC JUMP TO ADDRESS IN U REGISTER
3351 B706 7E B4 4A LB706 JMP LB44A 'ILLEGAL FUNCTION CALL'

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 04:49

Evalúa una expresión numérica y retorna el entero en ACCB o Error "FC" si > 255 ($B709-$B715)

Código: Seleccionar todo

3352 * EVALUATE AN EXPRESSION - RETURN AN INTEGER IN
3353 * ACCB - 'FC' ERROR IF EXPRESSION > 255
3354 B709 9D 9F LB709 JSR GETNCH GET NEXT BASIC INPUT CHARACTER
3355 B70B BD B1 41 LB70B JSR LB141 EVALUATE A NUMERIC EXPRESSION
3356 B70E BD B3 E9 LB70E JSR LB3E9 CONVERT FPA0 TO INTEGER IN ACCD
3357 B711 4D TSTA TEST MS BYTE OF INTEGER
3358 B712 26 F2 BNE LB706 'FC' ERROR IF EXPRESSION > 255
3359 B714 0E A5 JMP GETCCH GET CURRENT INPUT CHARACTER FROM BASIC

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 04:50

Función VAL ($B716-$B73C)

Código: Seleccionar todo

3360
3361 * VAL
3362 B716 BD B6 86 VAL JSR LB686 POINT X TO STRING ADDRESS
3363 B719 10 27 03 1C LBEQ LBA39 IF NULL STRING SET FPA0
3364 B71D DE A6 LDU CHARAD SAVE INPUT POINTER IN REGISTER U
3365 B71F 9F A6 STX CHARAD POINT INPUT POINTER TO ADDRESS OF STRING
3366 B721 3A ABX MOVE POINTER TO END OF STRING TERMINATOR
3367 B722 A6 84 LDA ,X GET LAST BYTE OF STRING
3368 B724 34 52 PSHS U,X,A SAVE INPUT POINTER, STRING TERMINATOR
3369 * ADDRESS AND CHARACTER
3370 B726 6F 84 CLR ,X CLEAR STRING TERMINATOR : FOR ASCII - FP CONVERSION
3371 B728 9D A5 JSR GETCCH GET CURRENT CHARACTER FROM BASIC
3372 B72A BD BD 12 JSR LBD12 CONVERT AN ASCII STRING TO FLOATING POINT
3373 B72D 35 52 PULS A,X,U RESTORE CHARACTERS AND POINTERS
3374 B72F A7 84 STA ,X REPLACE STRING TERMINATOR
3375 B731 DF A6 STU CHARAD RESTORE INPUT CHARACTER
3376 B733 39 RTS

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 04:52

Evalúa una expresión numérica y retorna el entero en (X) o Error "FC" si > 32767 ($B73D-$B74F)

Código: Seleccionar todo

3377
3378 B734 8D 07 LB734 BSR LB73D * EVALUATE AN EXPRESSION, RETURN
3379 B736 9F 2B STX BINVAL * THE VALUE IN X; STORE IT IN BINVAL
3380 B738 BD B2 6D LB738 JSR LB26D SYNTAX CHECK FOR A COMMA
3381 B73B 20 CE BRA LB70B EVALUATE EXPRESSION IN RANGE 0 <= X < 256
3382 * EVALUATE EXPRESSION : RETURN INTEGER PORTION IN X - 'FC' ERROR IF
3383 * EXPRESSION IS NEGATIVE OR > 32767, I.E. NOT A LEGAL POSITIVE INTEGER.
3384 B73D BD B1 41 LB73D JSR LB141 EVALUATE NUMERIC EXPRESSION
3385 B740 96 54 LB740 LDA FP0SGN GET SIGN OF FPA0 MANTISSA
3386 B742 2B C2 BMI LB706 'ILLEGAL FUNCTION CALL' IF NEGATIVE
3387 B744 96 4F LDA FP0EXP GET EXPONENT OF FPA0
3388 B746 81 90 CMPA #$90 COMPARE TO LARGEST POSITIVE INTEGER
3389 B748 22 BC BHI LB706 'ILLEGAL FUNCTION CALL' IF TOO LARGE
3390 B74A BD BC C8 JSR LBCC8 SHIFT BINARY POINT TO EXTREME RIGHT OF FPA0
3391 B74D 9E 52 LDX FPA0+2 LOAD X WITH LOWER TWO BYTES OF FPA0
3392 B74F 39 RTS

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 04:54

Función PEEK ($B750-$B756)

Código: Seleccionar todo

3393
3394 * PEEK
3395 B750 8D EE PEEK BSR LB740 CONVERT FPA0 TO INTEGER IN REGISTER X
3396 B752 E6 84 LDB ,X GET THE VALUE BEING 'PEEK'ED
3397 B754 7E B4 F3 JMP LB4F3 CONVERT ACCB INTO A FP NUMBER

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 04:55

Comando POKE ($B757-$B75D)

Código: Seleccionar todo

3398
3399 * POKE
3400 B757 8D DB POKE BSR LB734 EVALUATE 2 EXPRESSIONS
3401 B759 9E 2B LDX BINVAL GET THE ADDRESS TO BE 'POKE'ED
3402 B75B E7 84 STB ,X STORE THE DATA IN THAT ADDRESS
3403 B75D 39 RTS

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 05:00

Comando LLIST B75E ($B763-$46942)

Código: Seleccionar todo

3404
3405 * LLIST
3406 B75E C6 FE LLIST LDB #-2 * SET DEVICE NUMBER TO
3407 B760 D7 6F STB DEVNUM * PRINTER
3408 B762 9D A5 JSR GETCCH GET CURRENT CHARACTER FROM BASIC


Comando LIST ($B764-$B783)

Código: Seleccionar todo

3409
3410 * LIST
3411 B764 34 01 LIST PSHS CC SAVE ZERO FLAG ON STACK
3412 B766 BD AF 67 JSR LAF67 CONVERT DECIMAL LINE NUMBER TO BINARY
3413 B769 BD AD 01 JSR LAD01 * FIND RAM ADDRESS OF THAT LINE NUMBER AND
3414 B76C 9F 66 STX LSTTXT * SAVE IT IN LSTTXT
3415 B76E 35 01 PULS CC GET ZERO FLAG FROM STACK
3416 B770 27 12 BEQ LB784 BRANCH IF END OF LINE
3417 B772 9D A5 JSR GETCCH GET CURRENT CHARACTER FROM BASIC
3418 B774 27 13 BEQ LB789 BRANCH IF END OF LINE
3419 B776 81 AC CMPA #$AC MINUS TOKEN (IS IT A RANGE OF LINE NUMBERS?)
3420 B778 26 09 BNE LB783 NO - RETURN
3421 B77A 9D 9F JSR GETNCH GET NEXT CHARACTER FROM BASIC
3422 B77C 27 06 BEQ LB784 BRANCH IF END OF LINE
3423 B77E BD AF 67 JSR LAF67 GET ENDING LINE NUMBER
3424 B781 27 06 BEQ LB789 BRANCH IF LEGAL LINE NUMBER
3425 B783 39 LB783 RTS


Listar el programa ($B784-$B7C1)

Código: Seleccionar todo

3426 * LIST THE ENTIRE PROGRAM
3427 B784 CE FF FF LB784 LDU #$FFFF * SET THE DEFAULT ENDING LINE NUMBER
3428 B787 DF 2B STU BINVAL * TO $FFFF
3429 B789 32 62 LB789 LEAS 2,S PURGE RETURN ADDRESS FROM THE STACK
3430 B78B 9E 66 LDX LSTTXT POINT X TO STARTING LINE ADDRESS
3431 B78D BD B9 5C LB78D JSR LB95C MOVE CURSOR TO START OF A NEW LINE
3432 B790 BD A5 49 JSR LA549 CHECK FOR A BREAK OR PAUSE
3433 B793 EC 84 LDD ,X GET ADDRESS OF NEXT BASIC LINE
3434 B795 26 08 BNE LB79F BRANCH IF NOT END OF PROGRAM
3435 B797 BD A4 2D LB797 JSR LA42D CHECK CLOSE FILE HANDLER
3436 B79A 0F 6F CLR DEVNUM SET DEVICE NUMBER TO SCREEN
3437 B79C 7E AC 73 JMP LAC73 RETURN TO BASIC’S MAIN INPUT LOOP
3438 B79F 9F 66 LB79F STX LSTTXT SAVE NEW STARTING LINE ADDRESS
3439 B7A1 EC 02 LDD 2,X * GET THE LINE NUMBER OF THIS LINE AND
3440 B7A3 10 93 2B CMPD BINVAL * COMPARE IT TO ENDING LINE NUMBER
3441 B7A6 22 EF BHI LB797 EXIT IF LINE NUMBER > ENDING LINE NUMBER
3442 B7A8 BD BD CC JSR LBDCC PRINT THE NUMBER IN ACCD ON SCREEN IN DECIMAL
3443 B7AB BD B9 AC JSR LB9AC SEND A SPACE TO CONSOLE OUT
3444 B7AE 9E 66 LDX LSTTXT GET RAM ADDRESS OF THIS LINE
3445 B7B0 8D 10 BSR LB7C2 UNCRUNCH A LINE
3446 B7B2 AE 9F 00 66 LDX [LSTTXT] POINT X TO START OF NEXT LINE
3447 B7B6 CE 02 DD LDU #LINBUF+1 POINT U TO BUFFER FULL OF UNCRUNCHED LINE
3448 B7B9 A6 C0 LB7B9 LDA ,U+ GET A BYTE FROM THE BUFFER
3449 B7BB 27 D0 BEQ LB78D BRANCH IF END OF BUFFER
3450 B7BD BD B9 B1 JSR LB9B1 SEND CHARACTER TO CONSOLE OUT
3451 B7C0 20 F7 BRA LB7B9 GET ANOTHER CHARACTER


Desempaquetar una linea de basic en el buffer de entrada ($B7C2-$B7E5)

Código: Seleccionar todo

3452
3453 * UNCRUNCH A LINE INTO BASIC’S LINE INPUT BUFFER
3454 B7C2 BD 01 A6 LB7C2 JSR RVEC24 HOOK INTO RAM
3455 B7C5 30 04 LEAX 4,X MOVE POINTER PAST ADDRESS OF NEXT LINE AND LINE NUMBER
3456 B7C7 10 8E 02 DD LDY #LINBUF+1 UNCRUNCH LINE INTO LINE INPUT BUFFER
3457 B7CB A6 80 LB7CB LDA ,X+ GET A CHARACTER
3458 B7CD 27 51 BEQ LB820 BRANCH IF END OF LINE
3459 B7CF 2B 15 BMI LB7E6 BRANCH IF IT’S A TOKEN
3460 B7D1 81 3A CMPA #': CHECK FOR END OF SUB LINE
3461 B7D3 26 0D BNE LB7E2 BRNCH IF NOT END OF SUB LINE
3462 B7D5 E6 84 LDB ,X GET CHARACTER FOLLOWING COLON
3463 B7D7 C1 84 CMPB #$84 TOKEN FOR ELSE?
3464 B7D9 27 F0 BEQ LB7CB YES - DON’T PUT IT IN BUFFER
3465 B7DB C1 83 CMPB #$83 TOKEN FOR REMARK?
3466 B7DD 27 EC BEQ LB7CB YES - DON’T PUT IT IN BUFFER
3467 B7DF 8C FCB SKP2 SKIP TWO BYTES
3468 B7E0 86 21 LB7E0 LDA #'! EXCLAMATION POINT
3469 B7E2 8D 30 LB7E2 BSR LB814 PUT CHARACTER IN BUFFER
3470 B7E4 20 E5 BRA LB7CB GET ANOTHER CHARACTER

Desempaqueta un token ($B7E6-$B820)

Código: Seleccionar todo

3471 * UNCRUNCH A TOKEN
B39
COLOR BASIC UNRAVELLED II APPENDIX B
DISASSEMBLY OF COLOR BASIC 1.2
ORIGIN:SPECTRAL ASSOC
REVISED:12/26/1999 WALTER K ZYDHEK
3472 B7E6 CE 01 16 LB7E6 LDU #COMVEC-10 FIRST DO COMMANDS
3473 B7E9 81 FF CMPA #$FF CHECK FOR SECONDARY TOKEN
3474 B7EB 26 04 BNE LB7F1 BRANCH IF NON SECONDARY TOKEN
3475 B7ED A6 80 LDA ,X+ GET SECONDARY TOKEN
3476 B7EF 33 45 LEAU 5,U BUMP IT UP TO SECONDARY FUNCTIONS
3477 B7F1 84 7F LB7F1 ANDA #$7F MASK OFF BIT 7 OF TOKEN
3478 B7F3 33 4A LB7F3 LEAU 10,U MOVE TO NEXT COMMAND TABLE
3479 B7F5 6D C4 TST ,U IS THIS TABLE ENABLED?
3480 B7F7 27 E7 BEQ LB7E0 NO - ILLEGAL TOKEN
3481 B7F9 A0 C4 SUBA ,U SUBTRACT THE NUMBER OF TOKENS FROM THE CURRENT TOKEN NUMBER
3482 B7FB 2A F6 BPL LB7F3 BRANCH IF TOKEN NOT IN THIS TABLE
3483 B7FD AB C4 ADDA ,U RESTORE TOKEN NUMBER RELATIVE TO THIS TABLE
3484 B7FF EE 41 LDU 1,U POINT U TO COMMAND DICTIONARY TABLE
3485 B801 4A LB801 DECA DECREMENT TOKEN NUMBER
3486 B802 2B 06 BMI LB80A BRANCH IF THIS IS THE CORRECT TOKEN
3487 * SKIP THROUGH DICTIONARY TABLE TO START OF NEXT TOKEN
3488 B804 6D C0 LB804 TST ,U+ GRAB A BYTE
3489 B806 2A FC BPL LB804 BRANCH IF BIT 7 NOT SET
3490 B808 20 F7 BRA LB801 GO SEE IF THIS IS THE CORRECT TOKEN
3491 B80A A6 C4 LB80A LDA ,U GET A CHARACTER FROM DICTIONARY TABLE
3492 B80C 8D 06 BSR LB814 PUT CHARACTER IN BUFFER
3493 B80E 6D C0 TST ,U+ CHECK FOR START OF NEXT TOKEN
3494 B810 2A F8 BPL LB80A BRANCH IF NOT DONE WITH THIS TOKEN
3495 B812 20 B7 BRA LB7CB GO GET ANOTHER CHARACTER
3496 B814 10 8C 03 D6 LB814 CMPY #LINBUF+LBUFMX TEST FOR END OF LINE INPUT BUFFER
3497 B818 24 06 BCC LB820 BRANCH IF AT END OF BUFFER
3498 B81A 84 7F ANDA #$7F MASK OFF BIT 7
3499 B81C A7 A0 STA ,Y+ * SAVE CHARACTER IN BUFFER AND
3500 B81E 6F A4 CLR ,Y * CLEAR NEXT CHARACTER SLOT IN BUFFER
3501 B820 39 LB820 RTS

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 05:07

Empaqueta una linea ($B821-$B8F6)

Código: Seleccionar todo

3502 *
3503 * CRUNCH THE LINE THAT THE INPUT POINTER IS
3504 * POINTING TO INTO THE LINE INPUT BUFFER
3505 * RETURN LENGTH OF CRUNCHED LINE IN ACCD
3506 *
3507 B821 BD 01 A3 LB821 JSR RVEC23 HOOK INTO RAM
3508 B824 9E A6 LDX CHARAD GET BASIC'S INPUT POINTER ADDRESS
3509 B826 CE 02 DC LDU #LINBUF POINT X TO LINE INPUT BUFFER
3510 B829 0F 43 LB829 CLR V43 CLEAR ILLEGAL TOKEN FLAG
3511 B82B 0F 44 CLR V44 CLEAR DATA FLAG
3512 B82D A6 80 LB82D LDA ,X+ GET INPUT CHAR
3513 B82F 27 21 BEQ LB852 BRANCH IF END OF LINE
3514 B831 0D 43 TST V43 * CHECK ILLEGAL TOKEN FLAG & BRANCH IF NOT
3515 B833 27 0F BEQ LB844 * PROCESSING AN ILLEGAL TOKEN
3516 B835 BD B3 A2 JSR LB3A2 SET CARRY IF NOT UPPER CASE ALPHA
3517 B838 24 18 BCC LB852 BRANCH IF UPPER CASE ALPHA
3518 B83A 81 30 CMPA #'0 * DON’T CRUNCH ASCII NUMERIC CHARACTERS
3519 B83C 25 04 BLO LB842 * BRANCH IF NOT NUMERIC
3520 B83E 81 39 CMPA #'9 *
3521 B840 23 10 BLS LB852 * BRANCH IF NUMERIC
3522 * END UP HERE IF NOT UPPER CASE ALPHA OR NUMERIC
3523 B842 0F 43 LB842 CLR V43 CLEAR ILLEGAL TOKEN FLAG
3524 B844 81 20 LB844 CMPA #SPACE SPACE?
3525 B846 27 0A BEQ LB852 DO NOT REMOVE SPACES
3526 B848 97 42 STA V42 SAVE INPUT CHARACTER AS SCAN DELIMITER
3527 B84A 81 22 CMPA #'" CHECK FOR STRING DELIMITER
3528 B84C 27 38 BEQ LB886 BRANCH IF STRING
3529 B84E 0D 44 TST V44 * CHECK DATA FLAG AND BRANCH IF CLEAR
3530 B850 27 19 BEQ LB86B * DO NOT CRUNCH DATA
3531 B852 A7 C0 LB852 STA ,U+ SAVE CHARACTER IN BUFFER
3532 B854 27 06 BEQ LB85C BRANCH IF END OF LINE
3533 B856 81 3A CMPA #': * CHECK FOR END OF SUBLINE
3534 B858 27 CF BEQ LB829 * AND RESET FLAGS IF END OF SUBLINE
3535 B85A 20 D1 LB85A BRA LB82D GO GET ANOTHER CHARACTER
3536 B85C 6F C0 LB85C CLR ,U+ * DOUBLE ZERO AT END OF LINE
3537 B85E 6F C0 CLR ,U+ *
3538 B860 1F 30 TFR U,D SAVE ADDRESS OF END OF LINE IN ACCD
3539 B862 83 02 DA SUBD #LINHDR LENGTH OF LINE IN ACCD
3540 B865 8E 02 DB LDX #LINBUF-1 * SET THE INPUT POINTER TO ONE BEFORE
3541 B868 9F A6 STX CHARAD * THE START OF THE CRUNCHED LINE
3542 B86A 39 RTS EXIT 'CRUNCH'
3543 B86B 81 3F LB86B CMPA #'? CHECK FOR "?" - PRINT ABBREVIATION
3544 B86D 26 04 BNE LB873 BRANCH IF NOT PRINT ABBREVIATION
3545 B86F 86 87 LDA #$87 * GET THE PRINT TOKEN AND SAVE IT
3546 B871 20 DF BRA LB852 * IN BUFFER
3547 B873 81 27 LB873 CMPA #'' APOSTROPHE IS SAME AS REM
3548 B875 26 13 BNE LB88A BRANCH IF NOT REMARK
3549 B877 CC 3A 83 LDD #$3A83 COLON, REM TOKEN
3550 B87A ED C1 STD ,U++ SAVE IN BUFFER
3551 B87C 0F 42 LB87C CLR V42 SET DELIMITER = 0 (END OF LINE)
3552 B87E A6 80 LB87E LDA ,X+ SCAN TILL WE MATCH [V42]
3553 B880 27 D0 BEQ LB852 BRANCH IF END OF LINE
3554 B882 91 42 CMPA V42 DELIMITER?
3555 B884 27 CC BEQ LB852 BRANCH OUT IF SO
3556 B886 A7 C0 LB886 STA ,U+ DON’T CRUNCH REMARKS OR STRINGS
3557 B888 20 F4 BRA LB87E GO GET MORE STRING OR REMARK
3558 B88A 81 30 LB88A CMPA #'0 * LESS THAN ASCII ZERO?
3559 B88C 25 04 BCS LB892 * BRANCH IF SO
3560 B88E 81 3C CMPA #';+1 = CHECK FOR NUMERIC VALUE, COLON OR SEMICOLON
B40
COLOR BASIC UNRAVELLED II APPENDIX B
DISASSEMBLY OF COLOR BASIC 1.2
ORIGIN:SPECTRAL ASSOC
REVISED:12/26/1999 WALTER K ZYDHEK
3561 B890 25 C0 BCS LB852 = AND INSERT IN BUFFER IF SO
3562 B892 30 1F LB892 LEAX -1,X MOVE INPUT POINTER BACK ONE
3563 B894 34 50 PSHS U,X SAVE POINTERS TO INPUT STRING, OUTPUT STRING
3564 B896 0F 41 CLR V41 TOKEN FLAG 0 = COMMAND, FF = SECONDARY
3565 B898 CE 01 16 LDU #COMVEC-10 POINT U TO COMMAND INTERPRETATION
3566 * TABLE FOR BASIC - 10
3567 B89B 0F 42 LB89B CLR V42 INITIALIZE V42 AS TOKEN COUNTER
3568 B89D 33 4A LB89D LEAU 10,U MOVE TO NEXT COMMAND INTERPRETATION TABLE
3569 B89F A6 C4 LDA ,U GET NUMBER OF COMMANDS
3570 B8A1 27 31 BEQ LB8D4 GO DO SECONDARY FUNCTIONS IF NO COMMAND TABLE
3571 B8A3 10 AE 41 LDY 1,U POINT Y TO COMMAND DICTIONARY TABLE
3572 B8A6 AE E4 LB8A6 LDX ,S GET POINTER TO INPUT STRING
3573 B8A8 E6 A0 LB8A8 LDB ,Y+ GET A BYTE FROM DICTIONARY TABLE
3574 B8AA E0 80 SUBB ,X+ SUBTRACT INPUT CHARACTER
3575 B8AC 27 FA BEQ LB8A8 LOOP IF SAME
3576 B8AE C1 80 CMPB #$80 LAST CHAR IN RESERVED WORD TABLE HAD
3577 * BIT 7 SET, SO IF WE HAVE $80 HERE
3578 * THEN IT IS A GOOD COMPARE
3579 B8B0 26 38 BNE LB8EA BRANCH IF NO MATCH - CHECK ANOTHER COMMAND
3580 B8B2 32 62 LEAS 2,S DELETE OLD INPUT POINTER FROM STACK
3581 B8B4 35 40 PULS U GET POINTER TO OUTPUT STRING
3582 B8B6 DA 42 ORB V42 OR IN THE TABLE POSITION TO MAKE THE TOKEN
3583 * - NOTE THAT B ALREADY HAD $80 IN IT -
3584 B8B8 96 41 LDA V41 * CHECK TOKEN FLAG AND BRANCH
3585 B8BA 26 06 BNE LB8C2 * IF SECONDARY
3586 B8BC C1 84 CMPB #$84 IS IT ELSE TOKEN?
3587 B8BE 26 06 BNE LB8C6 NO
3588 B8C0 86 3A LDA #': PUT A COLON (SUBLINE) BEFORE ELSE TOKEN
3589 B8C2 ED C1 LB8C2 STD ,U++ SECONDARY TOKENS PRECEEDED BY $FF
3590 B8C4 20 94 BRA LB85A GO PROCESS MORE INPUT CHARACTERS
3591 B8C6 E7 C0 LB8C6 STB ,U+ SAVE THIS TOKEN
3592 B8C8 C1 86 CMPB #$86 DATA TOKEN?
3593 B8CA 26 02 BNE LB8CE NO
3594 B8CC 0C 44 INC V44 SET DATA FLAG
3595 B8CE C1 82 LB8CE CMPB #$82 REM TOKEN?
3596 B8D0 27 AA BEQ LB87C YES
3597 B8D2 20 86 LB8D2 BRA LB85A GO PROCESS MORE INPUT CHARACTERS
3598 * CHECK FOR A SECONDARY TOKEN
3599 B8D4 CE 01 1B LB8D4 LDU #COMVEC-5 NOW DO SECONDARY FUNCTIONS
3600 B8D7 03 41 COM V41 TOGGLE THE TOKEN FLAG
3601 B8D9 26 C0 BNE LB89B BRANCH IF NOW CHECKING SECONDARY COMMANDS
3602
3603 * THIS CODE WILL PROCESS INPUT DATA WHICH CANNOT BE CRUNCHED AND SO
3604 * IS ASSUMED TO BE ILLEGAL DATA OR AN ILLEGAL TOKEN
3605 B8DB 35 50 PULS X,U RESTORE INPUT AND OUTPUT POINTERS
3606 B8DD A6 80 LDA ,X+ * MOVE THE FIRST CHARACTER OF AN
3607 B8DF A7 C0 STA ,U+ * ILLEGAL TOKEN
3608 B8E1 BD B3 A2 JSR LB3A2 SET CARRY IF NOT ALPHA
3609 B8E4 25 EC BCS LB8D2 BRANCH IF NOT ALPHA
3610 B8E6 03 43 COM V43 SET ILLEGAL TOKEN FLAG IF UPPER CASE ALPHA
3611 B8E8 20 E8 BRA LB8D2 PROCESS MORE INPUT CHARACTERS
3612 B8EA 0C 42 LB8EA INC V42 INCREMENT TOKEN COUNTER
3613 B8EC 4A DECA DECR COMMAND COUNTER
3614 B8ED 27 AE BEQ LB89D GET ANOTHER COMMAND TABLE IF DONE W/THIS ONE
3615 B8EF 31 3F LEAY -1,Y MOVE POINTER BACK ONE
3616 B8F1 E6 A0 LB8F1 LDB ,Y+ * GET TO NEXT
3617 B8F3 2A FC BPL LB8F1 * RESERVED WORD
3618 B8F5 20 AF BRA LB8A6 GO SEE IF THIS WORD IS A MATCH

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 05:18

PRINT PRINT.

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor pser1 » 28 Feb 2019 10:15

Dios mio, Luis
sigues enviando 'spam' sin piedad ;-)
A este paso acabarás con la capacidad de disco del servidor -507
saludos
pere

Pd analiza tanto como quieras / puedas, pero yo te aconsejaría que los mensajes que subas al hilo tengan 'contenido' propio.
Para que los lectores vean la tira de código en ensamblador sigo pensando que un enlace (ya subido aquí) a los ficheros pdf
sobra y basta.

Avatar de Usuario
Chema
Mensajes: 2474
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 2514 veces
Agradecimiento recibido: 754 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor Chema » 28 Feb 2019 10:59

Yo no soy admin del foro, pero creo que deberías plantearte tener un documento único donde vayas añadiendo esa información (por ejemplo al inicio del hilo) y que lo vayas actualizando. Y si es un documento externo casi que mejor. Llenar páginas del foro con mensajes que contienen rutinas en ensamblador es un poquito exagerado.

Pero es mi opinión.

Avatar de Usuario
ron
Mensajes: 19235
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2203 veces
Agradecimiento recibido: 1992 veces

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor ron » 28 Feb 2019 11:41

Luis, creo que los usuarios no saben decirte que esto es una locura, lo primero que no se entiende, no se sabe en que se aplica ni para que vale, no conduce a nada, no aporta nada, no enseña nada. ¿ En serio te has leído el post de PSER1 ? , blanco y en botella.

No te va nadie a cercenar el derecho a postear lo que quieras, pero vamos, este es el típico hilo que se sigue hinchando pero no tiene nada aprovechable, recuerda lo que te dije en el otro hilo. Y por favor, no metas el AMOS en un hilo de COCO. Por cierto, usuarios de COCO que estén en esta casa te sobran dedos de las manos.

Directamente no voy a entrar más al hilo. Haz lo que quieras.

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor pser1 » 28 Feb 2019 13:49

Hola,
Yo entiendo que Luis quiere compartir su idea y ver si alguien se engancha al proyecto, pero para ello debería subir mensajes
que concreten objetivos y por supuesto que sean abordables sin perecer en el intento ...
No es nada fácil animar a la gente a subirse al carro del desarrollo de un proyecto pequeño/mediano así que pretender *mejorar*
el producto de Microsoft que funciona en CoCo y Dragón para que luego no haya un solo usuario que lo utilice me parece eso, una idea
para un Robinson Crusoe, ojalá me equivoque, pero me temo que va a ser que no -banghead
saludos
pere

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor luiscoco » 28 Feb 2019 20:19

Bueno gracias a todos, la idea de este hilo, que tal vez sea bueno ponerlo oculto a todos los que no estén en este tema, (no se, si eso se puede), es que pueda colocar en cada entrada, la aclaración que necesite la rutina, ya que, aunque el UNREVELLED trae comentarios por cada linea, no me ayuda a comprender los mecanismos entre las rutinas, los datos de entrada y salidas, tampoco tener una buena idea de que cambiar y que hacer de nuevo, mucho menos donde tener un sitio para anotar las decisiones y cambios que se le aran a una rutina, tambien sirve como expansión del indice de la pagina principal y así poderme referir en el tema de discusiones a un tema especifico mediante un link.
Y parecía ser algo bueno, pero la idea no es molestar.
tampoco veo claro como ir modificando todo el proyecto sin tenerlo claro.
Pero los entiendo. continuare en el otro hilo de discusiones, porque tengo algunas dudas. ya ni se que are con este. lo pensare mas.

Anoche el foro me bloqueo y no me dejaba continuar, pensaba terminar todo anoche, jeje. Por eso quedo PRINT PRINT en el ultimo, eso fue lo único que me dejo poner, jajaja

Avatar de Usuario
kikems
Mensajes: 4150
Registrado: 30 May 2013 19:23
Agradecido : 1459 veces
Agradecimiento recibido: 1880 veces

Re: Nuevo proyecto Basic CoCo/Dragon/DP400

Mensajepor kikems » 28 Feb 2019 20:29

luiscoco escribió:Bueno gracias a todos, la idea de este hilo, que tal vez sea bueno ponerlo oculto a todos los que no estén en este tema, (no se, si eso se puede), es que pueda colocar en cada entrada, la aclaración que necesite la rutina, ya que, aunque el UNREVELLED trae comentarios por cada linea, no me ayuda a comprender los mecanismos entre las rutinas, los datos de entrada y salidas, tampoco tener una buena idea de que cambiar y que hacer de nuevo, mucho menos donde tener un sitio para anotar las decisiones y cambios que se le aran a una rutina, tambien sirve como expansión del indice de la pagina principal y así poderme referir en el tema de discusiones a un tema especifico mediante un link.
Y parecía ser algo bueno, pero la idea no es molestar.
tampoco veo claro como ir modificando todo el proyecto sin tenerlo claro.
Pero los entiendo. continuare en el otro hilo de discusiones, porque tengo algunas dudas. ya ni se que are con este. lo pensare mas.

Anoche el foro me bloqueo y no me dejaba continuar, pensaba terminar todo anoche, jeje. Por eso quedo PRINT PRINT en el ultimo, eso fue lo único que me dejo poner, jajaja


Creo que es mejor que lo juntes todo en unos pdf y los alojes en el servidor, de esta manera crecen los mensajes a lo loco y cuando acumules un poco más ya será totalmente inmanejable el hilo. Yo alojaría todo en el primer post en PDFs y dejaría el hilo para lo que realmente es..... para el debate o sugerencias que puedan surgir de la documentación pdf que aportas en el primer post.

Si anoche el servidor te bloqueó, entonces eso demuestra que las medidas auto spam que están activadas funcionan correctamente. -thumbup -thumbup . Puedo llegar a entender que no nos hagas caso, pero es que hasta el propio subprograma PHP del foro te está detectando como spam. -507 -rofl


Volver a “Tandy CoCo”

¿Quién está conectado?

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