Jump to content

dhe

+AtariAge Subscriber
  • Posts

    1,812
  • Joined

  • Last visited

Everything posted by dhe

  1. Usually there have been notices on Jan 1 of each new year.
  2. Have you loaded GPL with the TANG? What about EXEC - it's kind of sorta like a mini GPL?
  3. I'm looking at a couple of books that have input routines - Art of Assembler, Harrison and Intro to Assembly, Molesworth. Other than these, does anyone know of a good routine to accept input - something like an accept at? It really ends up being a non-trivial exercise, with from 40-100 lines of code devoted to a basic input statement.
  4. Thanks @InsaneMultitasker I was thinking I should have moved the second field down a line, I think that would have made the one off error stand out a little more.
  5. I've ran in to a strange problem with a sequential read example I found in Molesworth Intro to Assembler. DEF BEGIN REF DSRLNK,VSBW,VMBW,VMBR,VSBR STATUS EQU >837C GPL STATUS BYTE ADDRESS POINTR EQU >8356 DSR POINTER ADDRESS BUFADR EQU >1000 VDP RAM ADDRESS FOR RECORD BUFFER PABADR EQU >0F80 VDP RAM ADDRESS FOR PAB READ BYTE >02 "READ" OPCODE CLOSE BYTE >01 "CLOSE" OPCODE EOF DATA 0 END OF FILE FLAG PAB DATA >0014,BUFADR,>5000,>0000,>000A PAB DATA TEXT 'DSK2.FILE1' ERRMSG TEXT 'I/O ERROR=' DSR ERROR MESSAGE CPUBUF BSS 80 CPU RAM RECORD BUFFER ADDRESS FNAME EQU CPUBUF FIRST NAME ADDRESS LNAME EQU CPUBUF+14 LAST NAME ADDRESS LEN BSS 2 ACTUAL RECORD LENGTH WORKSPACE RETURN BSS 2 SAVE RETURN ADDRESS AREA WR BSS >20 WORKSPACE REGISTERS BEGIN MOV R11,@RETURN SAVE RETURN ADDRESS LWPI WR LOAD WORKSPACE POINTER LI R0,PABADR VDP RAM ADDRESS FOR PAB LI R1,PAB CPU RAM ADDRESS OF PAB DATA LI R2,20 LENGTH OF DATA BLWP @VMBW WRITE PAB TO VDP RAM BL @DSR OPEN THE FILE MOVB @READ,R1 LOAD READ OP-CODE INTO R1 LI R0,PABADR LOAD PAB ADDRESS INTO RO BLWP @VSBW PUT READ INTO PAB BYTE 0 CLR R4 CLEAR RECORD COUNTER READF BL @DSR PERFORM DSR ROUTINE MOV @EOF,@EOF CHECK FOR END OF FILE JNE EOJ IF EOF GO TO END OF JOB INC R4 ADD 1 TO RECORD COUNT CI R4,3 CHECK FOR THIRD RECORD JNE READF IF NOT THIRD, READ AGAIN LI R0,PABADR+5 ADDRESS OF CHARACTER COUNT BLWP @VSBR READ COUNT INTO LEFT BYTE R1 SRL R1,8 SHIFT LEFT TO RIGHT MOV R1,R2 MOVE VALUE TO R2 MOV R1,@LEN SAVE VALUE IN LEN LI R0,BUFADR VDP RAM RECORD BUFFER ADDRESS LI R1,CPUBUF CPU RAM ADDRESS FOR RECORD BLWP @VMBR GET RECORD FROM VDP TO CPU RAM LI R0,290 SCREEN ADDRESS FOR FIRST NAME LI R1,FNAME CPU RAM ADDRESS OF FIRST NAME LI R2,14 LENGTH OF FIRST NAME FIELD BLWP @VMBW DISPLAY FIRST NAME LI R0,305 SCREEN ADDRESS FOR LAST NAME LI R1,LNAME CPU RAM ADDRESS OF LAST NAME MOV @LEN,R2 MOVE RECORD LENGTH INTO R2 AI R2,-14 SUBTRACT LENGTH OF FIRST NAME BLWP @VMBW DISPLAY LAST NAME JMP EOJ GO TO END OF JOB DSR LI R6,PABADR+9 LOAD R6 WITH DESCRIPTOR LENGTH MOV R6,@POINTR MOVE ADDRESS TO POINTER BLWP @DSRLNK PERFORM DSRLNK DATA 8 DATA NEEDED BY DSRLNK * JEQ DSRERR CHECK FOR ERROR RT RETURN DSRERR INC @EOF SET EOF INDICATOR LI R0,PABADR+1 ADDRESS OF PAB BYTE 1 BLWP @VSBR READ PAB BYTE 1 INTO R1 SRL R1,13 SHIFT HIGH ORDER 3 BITS TO LOW CI R1,5 CHECK FOR EOF VALUE=5 JNE IOERR IF NOT EOF THEN OTHER ERROR RT IF EOF THEN RETURN IOERR AI R1,>30 MASK ERROR CODE SLA R1,8 SWAP LOW ORDER TO HIGH ORDER LI R0,299 DISPLAY ERROR CODE BLWP @VSBW ON THE SCREEN LI R0,288 DISPLAY ERROR MESSAGE LI R1,ERRMSG LI R2,10 BLWP @VMBW EOJ MOV @EOF,@EOF IF EOF REACHED, DSR WILL JNE NOCLOS CLOSE FILE MOVB @CLOSE,R1 MOVE CLOSE OP-CODE TO R1 LI R0,PABADR LOAD PAB ADDRESS BLWP @VSBW WRITE CLOSE OP-CODE TO PAB 0 BL @DSR CLOSE FILE NOCLOS DECT @RETURN ALTER RETURN ADDRESS MOV @RETURN,R11 MOVE RETURN ADDRESS INTO R11 RT RETURN END I created a data file that looks like: When I execute the program I always get a space between the first later of last name and the rest of the last name. Exhibit One: Using Classic 99's Debugger I was able to find the record in both VDP and CPU RAM: Exhibit Two: VDP RAM: and CPU RAM: I'm really not sure where the space between F and I is coming from. Suggestion Box is open!! 😃
  6. FWIW - Don gave me one of the very first Turbo PALs. I ran it for two or three years pretty hard, and never had a problem.
  7. If you did in to the particulars of this auction, you'll see: " part of David Caine's 2023 collection@@." Wasn't this the guy who was associated with the Geneve Phoenix project?
  8. Just waiting for the exchange rate to move in my favor!
  9. Thanks @Don O'Neil that's one less chip that's an end for a Geneve!
  10. @RickyDean any files you can share with us?
  11. Probably a question for the Assembly thread, but as I was playing with an example and was questioning.... Is there every a time when a value NOT 8 is used after BLWP @DSRLNK?
  12. dhe

    vi99

    DHE's testing service is always open!
  13. That's some beautiful point to point soldering!
  14. https://ftp.whtech.com/datasheets and manuals/Hardware/Texas Instruments/PHP1240 Disk Controller Card/ti floppy controller card manual.pdf Page 42
  15. @mizapf would all the TIC libraries have to be re-written to use the GCC Compiler?
  16. I had an idea for a trivial game. How to implement one part made me think for a minute, because unlike looking for a keystroke, or waiting for input, I wanted to spin off the user to a task for a specific time period and then bring them back in to the main routine. I was able to knock together a crude proto-type in gcc (linux). #include <stdio.h> #include <time.h> int time_up; // I'm a global variable /* function declaration */ void usr_func(); int main() { time_t T = time(NULL); struct tm tm = *localtime(&T); time_up = tm.tm_min+2; printf("System Date is: %02d/%02d/%04d\n", tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900); printf("System Time is: %02d:%02d:%02d\n", tm.tm_hour, tm.tm_min, tm.tm_sec); printf("In Five Minutes it will be %02d:%02d:%02d\n", tm.tm_hour, tm.tm_min+5, tm.tm_sec); usr_func(); printf("User Function is done! \n"); return 0; } // end main void usr_func() { int character; time_t T = time(NULL); struct tm tm = *localtime(&T); printf("Give me some input.\n"); for(;;) { time_t T = time(NULL); struct tm tm = *localtime(&T); character = getchar(); if (tm.tm_min == time_up) return; } // end of for loop } // end usr_func I've looked at the libraries provided by @jedimatt42 and @Tursi and didn't see a clock or timer function. Does anyone have a library something like time.h for the TI-99/4A?
  17. I've got some C and Perl programmers, I'd like you to have a word with. 😂
  18. Secondly, they mention: The usual response to pressing QUIT while operating under TI Basic, Extended Basic and most utilitiesis for the computer to return to the main title screen. Here are the program segments to accomplish this. GPLWS EQU >83E0 . ABORT LIMI 2 ENABLE INTERRUPTS LWPI GPLWS LOAD GPL WORKSPACE REGISTERS BLWP @>0000 BRANCH THROUGH THE VECTOR >0000 This seems overly complicated. I would think just blwp @>0000 would always work ? Thirdly, the CYC mentions a Prentice Hall version of the book. I think I've only ever seen the Steve Davis publishing version. Does anyone have the Prentice Hall version?
  19. One thing that has always given me pause in Molesworth is: STATUS EQU >837C GPL STATUS BYTE then before returning they do: CLR @STATUS So the status byte, is a byte. CLR operates on a word. Is it dangerous to clear a word worth of memory, when you are aiming for a byte, or does the byte after the status byte not matter?
  20. So why did you go with a hexbus rs232, instead of running it through the hex-ti-r? Was it just ease of cabling?
  21. Does the hex-ti-r emulate an rs232? Next to a waffer tape, needed for storage, the rs232 for i/o with the outside is the second most needed peripheral.
×
×
  • Create New...