cas Posted May 14, 2017 Share Posted May 14, 2017 Sorry, my fault. I will look for the missing file in my disk collection and upload it. Wait for a message here ... Carsten I've now added WINDOW.OBJ to the atariwiki page (attachment). I remember using these ASM routines first from Turbo-Basic, them later I wrote the ACTION! interface, but never really used it in any applicaitons. The WINDOW.OBJ has not been written by me, I don't remember the origins. -- CS 3 Quote Link to comment Share on other sites More sharing options...
cas Posted May 14, 2017 Share Posted May 14, 2017 Very happy at your making an appearance Carsten, Before the complete move, and at times thru abbuc, Carsten almost always had darn near everything and knew of or about it. If he didn't know, he new who did. If that wasn't the case they'd all get together and find out..... I think sometimes it's there somewhere, but not linked or posted. Glad to here from you and see you are still at it! Are you still holding your regional group together? I missed your blog as well... http://strotmann.de/roller/cas/category/Personal last personal 2011 last overall 2013. I still muck about with the usb stuff from time to time. the current blog system is too heavy-weight, I plan to move to a lightweight static page blog system. I do not have much free time, so it is moving slowly. But there will be a new content and a new blog at some point of time. The regional group in Frankfurt is still doing strong, but I now live 300 KM away and have a small kid, so I'm not able to attend their meetings. But I meet with Beetle (Stefan) from time to time and do Atari stuff. Greetings Carsten 1 Quote Link to comment Share on other sites More sharing options...
cas Posted May 14, 2017 Share Posted May 14, 2017 Hi there Carsten! Thank you very much for this. Now I'm working on new libraries for PL65 and the fact is that ACTION! and PL65 are very similar. PL65 is very interesting language. IMHO it's some kind of mixture of programming concepts. For example this code shows us something like FORTH. PROC POS(INT col=$55 BYTE row=$54) BEGIN END I mean that STACK data obtained from arguments goes directly to defined memory cells. From the other way this code is something like LISP LAMBDA where LAMBDA is the FN definition and it can exist separately from FN declaration and even be the argument of another function. PROC WRTSTR(INT addr,len) FORWARD ! Its declaration ... ... ... BODY WRTSTR ! No needs arguments earlier declared BEGIN PCHAR(0,addr,len) END ! Its definition And this is the example when FN is the argument I mean that argiments of POS from stack directly goes to PLOT without preparing stack for PLOT FN PROC PLOT(PROC POS) ! Earlier defined... BEGIN PUT(6,color) END And this is internal assembly PRIMATIVE(whith star sign) routine. It means that PL65 take it's hands away from assembly. It's just standard CIO routine Differences are that PL65 uses it's own stack with internal STACK operator and that X-reg MUST be saved in XSAVE variable before using (It serves for PL65 program stack only!) and after using must be restored PROC CIO*(BYTE iocb BYTE com INT addr,len) BEGIN LDA STACK+6,X ASLA ASLA ASLA ASLA TAY LDA STACK+4,X STA ICCOM,Y LDA STACK+2,X STA ICBAL,Y LDA STACK+3,X STA ICBAH,Y LDA STACK,X STA ICBLL,Y LDA STACK+1,X STA ICBLH,Y TXA CLC ADC #8 STA XSAVE TYA TAX LDA OCHAR JSR $E456 BMI ioerr LDX XSAVE RETURN :ioerr LDX XSAVE DEX DEX TYA STA STACK,X LDA #0 STA STACK+1,X ERROR*() WRTSTR("Error ") WRITE(ERRNUM) END My personal disappointment is that PL65 lacks of TYPE and RECORDS abilities which are exist in ACTION! Please, don't consider my post as simply offtopic. It's written just for emphasize differences while langs are very similar. Best wishes, friends! ez Thanks for giving this information, I'm always interested in programming language concepts. I need to find some time to work with PL65 it seems 1 Quote Link to comment Share on other sites More sharing options...
576XE Posted May 15, 2017 Share Posted May 15, 2017 Many thanks, Carsten!At first, for your adding WINDOW.OBJ and at second for your kind words. As far as it's concerned PL65, there are another problem there.PL65 has an ability to work with POINTERS, but due to it's ancient nature we can NOT use address arythmetic like in C.Really we can but it's very cumbersome and unconvenient.The nature is in the fact that pointers are only the addresses on Z-pageWe can declare pointer and assign it a name like POINTER AdrP and values under the pointer must be declared as BYTE AdrBV BASED AdrP INT AdrWV BASED AdrP Thus, wrighting something like AdrP+1 means that we just moved its Z-Page address along Z-Page.It kills all programming of course. No more.This trick works:(Here DOT operator means taking address of named earlier entity.) ! PTR.PRG INCLUDE TERMINAL.LIB MAIN() INT A[5],I POINTER P INT B BASED P BEGIN P=.A B=1 P=.A+2 B=2 P=.A+4 B=3 FOR I=0 TO 2 DO WRITE(A[I]) CR() NEXT END You can see here that I must stay Z-page pointer P intact and need to increment address '.A' (or additional variable holding this address) by two (because of INT) every step.Thank you again and best wishes from Moscow!ez Quote Link to comment Share on other sites More sharing options...
576XE Posted May 16, 2017 Share Posted May 16, 2017 Sorry,Sorry,Sorry,Sorry!!! I found now that addressing arythmetics works in PL65. This code works! ! PTR.PRG INCLUDE TERMINAL.LIB MAIN() INT A[6],I POINTER P INT B BASED P BEGIN P=.A B=1 P=P+2 B=2 P=P+2 B=3 FOR I=0 TO 2 DO WRITE(A[I]) CR() NEXT END 1 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.