Último mensaje de la página anterior:
OPEN ($A5F6 - $A680) tipo, puerto, nombre$ Tiene HOOK en RAMAbre un puerto de comunicaciones con un periférico
Tipo: “I” = Input; “O” = Output; ”R”= Random; “B” = Binary
Puerto: 0 = Pantalla; -1 = Cassette; -2 = Printer; -3 = Serial; 1-15 Puertos en disco, para el Open se puede omitir el #, y usar variables o evaluaciones
Nombre= max 8 caracteres para el nombre.
Para la unidad de disco adicional-mente permite: “.” 3 caracteres de extensión “:” unidad de disco
EL OPEN "I" comienza en $A624
EL OPEN "O" comienza en $LA658
Zona de errores en $A616
Búsqueda por el nombre de archivo en CNMBUF comienza en LA648 y utiliza la siguiente rutina mas abajo
Código: Seleccionar todo
0824 * OPEN
0825 A5F6 BD 01 5E OPEN JSR RVEC0 HOOK INTO RAM
0826 A5F9 BD B1 56 JSR LB156 GET FILE STATUS (INPUT,OUTPUT)
0827 A5FC BD B6 A4 JSR LB6A4 GET FIRST BYTE OF STATUS STRING TO ACCB
0828 A5FF 34 04 PSHS B SAVE IT ON STACK
0829 A601 8D 9F BSR LA5A2 CHECK FOR SYNTAX AND GET DEVICE NUMBER
0830 A603 BD B2 6D JSR LB26D SYNTAX CHECK FOR COMMA, SYNTAX ERROR IF NOT
0831 A606 8D BD BSR LA5C5 GET FILE NAME
0832 A608 96 6F LDA DEVNUM GET DEVICE NUMBER
0833 A60A 0F 6F CLR DEVNUM SET DEVICE NUMBER TO SCREEN
0834 A60C 35 04 PULS B GET STATUS AGAIN
0835 A60E C1 49 CMPB #'I IS IT INPUT MODE?
0836 A610 27 12 BEQ LA624 YES
0837 A612 C1 4F CMPB #'O IS IT OUTPUT MODE?
0838 A614 27 42 BEQ LA658 YES
0839
0840 * IF IT ISN’T INPUT OR OUTPUT, BAD FILE MODE
0841 A616 C6 2A LA616 LDB #21*2 ERROR # 21 ‘BAD FILE MODE’
0842 A618 8C FCB SKP2 SKIP TWO BYTES
0843 A619 C6 28 LA619 LDB #20*2 ERROR # 20 ‘I/O ERROR
0844 A61B 8C FCB SKP2 SKIP TWO BYTES
0845 A61C C6 24 LA61C LDB #18*2 ERROR # 18 ‘FILE ALREADY OPEN’
0846 A61E 8C FCB SKP2 SKIP TWO BYTES
0847 A61F C6 26 LA61F LDB #19*2 ERROR # 19 ‘DEVICE NUMBER ERROR’
0848 A621 7E AC 46 JMP LAC46 JUMP TO ERROR HANDLER
0849 * INPUT
0850 A624 4C LA624 INCA DEVICE NUMBER SET TO TAPE?
0851 A625 2B EF BMI LA616 ‘BAD FILE MODE’ IF DEVNUM = NEG BUT NOT CASSETTE
0852 A627 26 2E BNE LA657 RETURN IF DEVNUM WAS SET TO SCREEN OR DISK
0853 * SET TO TAPE
0854 A629 8D 1D BSR LA648 GET HEADER BLOCK
0855 A62B B6 01 E3 LDA CASBUF+9 GET ASCII FLAG
0856 A62E B4 01 E4 ANDA CASBUF+10 ‘AND’ IT WITH FILE MODE
0857 A631 27 E3 BEQ LA616 ‘BAD FILE MODE’ - CRUNCHED FlLE OR MACH LANG
0858 A633 0C 78 INC FILSTA OPEN FILE FOR INPUT
0859 A635 BD A7 01 LA635 JSR LA701 START TAPE, READ A BLOCK
0860 A638 26 DF BNE LA619 ‘I/O ERROR’
0861 A63A 0D 7C TST BLKTYP CHECK BLOCK NUMBER
0862 A63C 27 DB BEQ LA619 ‘I/O ERROR’ IF HEADER BLOCK
0863 A63E 2B 17 BMI LA657 BRANCH IF THIS IS THE LAST BLOCK
0864 A640 96 7D LDA BLKLEN CHAR COUNT
0865 A642 27 F1 BEQ LA635 READ ANOTHER BLOCK IF NULL BLOCK
0866 A644 97 79 LA644 STA CINCTR STORE IN TEMP CHARACTER COUNTER
0867 A646 20 0A BRA LA652 RESET BUFFER POINTER
0868
0869 * SEARCH FOR FILE NAME IN CNMBUF
0870 A648 0D 78 LA648 TST FILSTA IS THE FILE OPEN?
0871 A64A 26 D0 BNE LA61C YES- ‘FILE ALREADY OPEN’
0872 A64C 8D 33 BSR LA681 SEARCH FOR CORRECT FILE NAME
0873 A64E 26 C9 BNE LA619 ‘I/O ERROR’
0874 A650 0F 79 LA650 CLR CINCTR CLEAR CHARACTER COUNTER
0875 A652 8E 01 DA LA652 LDX #CASBUF CASSETTE INPUT BUFFER ADDRESS
0876 A655 9F 7A STX CINPTR RESET IT
0877 A657 39 LA657 RTS
0878
0879 * WRITE OUT THE HEADER BLOCK
0880
0881 ** CASBUF FILE NAME
0882 ** CASBUF+8 FILE TYPE
0883 ** CASBUF+9 ASCII FLAG
0884 ** CASBUF+10 FILE MODE
0885 ** CASBUF+11,12 TRANSFER ADDRESS
0886 ** CASBUF+13,14 START ADDRESS
0887
0888 * ENTER HERE FOR DATA FILES W/DEVICE NUMBER IN ACCA (FOR OUTPUT)
0889 A658 4C LA658 INCA CHECK FOR CASSETTE DEVICE NUMBER
0890 A659 26 FC BNE LA657 RETURN IF DEVICE NUMBER WASN’T TAPE
--------------B10--------------
0891 A65B 4C INCA MAKE FILE TYPE = 1
0892 * ENTER HERE FOR ASCII FILES
0893 A65C 8E FF FF LA65C LDX #$FFFF SET ASCII FLAG AND MODE = $FF
0894 A65F 0D 78 LA65F TST FILSTA IS FILE OPEN?
0895 A661 26 B9 BNE LA61C YES- ‘FILE ALREADY OPEN’
0896 A663 CE 01 DA LDU #CASBUF CASSETTE INPUT BUFFER
0897 A666 DF 7E STU CBUFAD STORE IN STARTING ADDRESS
0898 A668 A7 48 STA 8,U FILE TYPE IN CASBUF+8
0899 A66A AF 49 STX 9,U ASCII FLAG & MODE IN CASBUF+9, CASBUF+10
0900 * CASBUF +8 +9 +10
0901 * TYPE ASCII MODE
0902 * BASIC CRUNCHED 00 00 00
0903 * BASIC ASCII 00 FF FF
0904 * DATA 01 FF FF
0905 * MACHINE LANGUAGE 02 00 00
0906 * MACHINE BLK LOAD 02 00 FF
0907
0908 A66C 8E 01 D2 LDX #CFNBUF+1 POINT X TO FILE NAME BUFFER
0909 A66F BD A5 98 JSR LA598 MOVE 8 BYTES FROM (X) TO (U)
0910 A672 0F 7C CLR BLKTYP ZERO BLOCK NUMBER
0911 A674 86 0F LDA #15 15 BYTES IN THE HEADER BLOCK
0912 A676 97 7D STA BLKLEN CHAR COUNT
0913 A678 BD A7 E5 JSR LA7E5 GO WRITE ONE BLOCK
0914 A67B 86 02 LDA #2 OUTPUT FILE
0915 A67D 97 78 STA FILSTA STORE IN FILE MODE
0916 A67F 20 CF BRA LA650 RESET POINTERS