tabar Posted June 12, 2012 Share Posted June 12, 2012 the gr.0 display list(and all others) have the command to move them down to compensate for overscan on TV screens. using an emulator this is not needed. i am trying to create a gr.0 display list that has 30 lines of text insted of 24. i can create the display list but i dont know how to tell it that there are 6 more lines of text. it will give an out of range error(144) or loop back to the top after line 24. is there a way to add more text lines? 5 DIM DL(50) 10 GRAPHICS 0:? 20 S=PEEK(560)+PEEK(561)*256 30 FOR I=0 TO 35 35 DL(I)=PEEK(S+I) 40 ? DL(I);" "; 45 NEXT I:? 50 FOR I=0 TO 31 55 POKE S+I,DL(I+3) 60 ? PEEK(S+I);" "; 65 NEXT I 70 FOR I=26 TO 31 75 POKE S+I,2 80 NEXT I:X=29 85 FOR I=I TO I+3 90 POKE S+I,DL(X)=X+1 100 NEXT I:? 110 FOR I=0 TO 35 115 ? PEEK(S+I);" "; 120 NEXT I:? 130 list:list using atari800winplus 4.1 rev c basic dos 2.5 xl/xe mode 1088 kb memory on d3.atr: gr0dl.bas gr0dl.lst d3.atr Quote Link to comment Share on other sites More sharing options...
+Stephen Posted June 12, 2012 Share Posted June 12, 2012 The OS will not know about the updated DLIst. You would have to re-work the scrolling routines, etc. or make your own. Also, I don't think you will be able to get 30 lines, as that will use up all 240 lines of the display and there are issues of the last line is in hi-res mode (maybe this does not apply if in character mode). Quote Link to comment Share on other sites More sharing options...
Synthpopalooza Posted June 13, 2012 Share Posted June 13, 2012 (edited) Here's a simple way to do it: DIM S$(1200) And your display list should be as follows 66 (graphics 0 + load memory scan) The next two bytes should be low+256*hi of ADR(S$) 29 lines of 2's next (for Graphics 0) 65 (Jump and wait for VB) next two bytes are the beginning of your display list. In your program you will want to set 88 and 89 to point to ADR(S$) ... then you will need to POKE to the screen memory to get chars to display, the regular print statements won't work as you have altered the normal screen map according to the OS. You can use string assignments on S$ to put data on screen, just keep in mind you will need to adjust for SCREEN codes (not ATASCII). For example, the heart character in S$ will put a space on the screen ... again as you are limited to 240 scanlines this may cause problems, you may have to restrict yourself to 29 lines. Also note that you will not be able to use this screen in immediate mode as this will cause S$ to shift in memory and mess up your screen. There is also a method called Konop's mode ... but it's very complicated, apparently some VSCROL tricks during a VBI create a 32 line display, with the characters being 6 scanlines tall. The program Theta Music Composer uses this trick. Edited June 13, 2012 by Synthpopalooza Quote Link to comment Share on other sites More sharing options...
Rybags Posted June 13, 2012 Share Posted June 13, 2012 A hacked OS could support >24 lines for emulator use, no idea if anyone's attempted it. The logical line mapping routine would also need altering. You can though do a bitmap mode + 4 line text window with full 192 lines in the bitmap using altered DList and the OS will support it just fine. Quote Link to comment Share on other sites More sharing options...
tabar Posted June 13, 2012 Author Share Posted June 13, 2012 thank you for the responces. i was just thinking that some of the programs i had written could use the extra lines. i will try your sugestions. Quote Link to comment Share on other sites More sharing options...
Synthpopalooza Posted June 14, 2012 Share Posted June 14, 2012 (edited) Here's a thought: you want 30*40 lines ... which is 1200 bytes A Graphics 6 display uses about 2100 bytes (600 more than you need) ... so call Graphics 6+16 and then poke in your display list, as I described above ... no blank line instructions, 66 followed by 2 bytes marking your screen memory, 29 more lines of 2's, then 65 followed by the beginning of your DL. Then: do a POKE 87,7 to fool the OS into thinking it's in 40 column mode. You can now print and plot chars to this screen, the caveat is: you must use ? #6 to put chars on screen. PRINT by itself will not work and reset your DL to normal graphics 0. If you want to scroll a line, there are ways that you can move your screen memory up by a line, especially if you use TurboBASIC ... MOVE DPEEK(88)+40,DPEEK(88),29*40 would work. Edited June 14, 2012 by Synthpopalooza Quote Link to comment Share on other sites More sharing options...
Rybags Posted June 14, 2012 Share Posted June 14, 2012 That won't work. Put character works pixel by pixel in bitmap modes. So you'd end up with nothing like you wanted in a text mode. But on XL you could build a 30 row text display and have 24 lines via S: (#6 with the OS "thinking" it's Graphics 12) and the last 4 as text window. But 30 lines means you have the scanline 240 bug to deal with. Quote Link to comment Share on other sites More sharing options...
tabar Posted June 26, 2012 Author Share Posted June 26, 2012 I am glad that this has given people somthing to think about. I did not know about the scanline bug. It did not need to be exactly 30 lines, i just found that i could add 6 lines to gr.0. it just would be nice with more than 24. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.