Author Topic: Self-Programming the MC68701 and the MC68701U4? (motorola)  (Read 19920 times)

0 Members and 2 Guests are viewing this topic.

Offline bytestormTopic starter

  • Regular Contributor
  • *
  • Posts: 64
  • Country: se
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #50 on: May 17, 2019, 11:54:35 am »
Ever think about just posting the raw S records?

of course, here it is, full raw PRObug S records. Its not that big actually.. Or I could try and learn assembly for the 680x but seems to be difficult to find usable software in win10 to compile it for the 6801..

S11BB8007EB8CD7EB8667EB8927EBAA87EBA7C7EBA790442BB390444FE
S11BB818BC660447BB64044CBD49044DB9FB054D56BF2F044FBA530433
S11BB83050BD1B0452BABF054849B8C0054859B8C80454BB870456BD20
S11BB8485A074348434BBE120750524F47BE800756455246BF4707587E
S11BB86054414CBF73FE378D1224FC847F27F8817F27F4D6FF26028DFE
S11BB878193339961148250348240396120D3937D611C52027FA9713ED
S11BB8903339378DF2D6FF2602D6E6810D2708811027EDC40320025422
S11BB8A8545A2BE4364F8DD73220F6CEBFA3BDBAA8CE411B0926FD39B8
S11BB8C0CC4F0697E6D71039CC000520F68E00C69FF5CE00F76F0008A3
S11BB8D88C010026F8CC10078DE1860A97118DCBCEBFADBDBAAF86D012
S11BB8F097F4CEEFEADFDB7C00088E00DA7F00FFBDBAB3862BBDB89204
S11BB908BDB9A925ED270ABDB99C25E6CEB9FF206CCEBB82812E27654C
S11BB920CEBA48812F275E9FE27F00E18D5D27137C00E136308C009022
S11BB9382F23BDB9A92524261C20E997E7CEB812DFE4DEE43CE6003AF7
S11BB950DFE4C003D1E1270D38C1FB26EDCEBFABBDBAAF2095DEE2DFB6
S11BB968EA3808A6003CDEEAA10027033820D309DFEA5A26EC38089EDD
S11BB980E2EE0096E7AD0025D420D8812C270A81202706810D270281DC
S11BB9982D398D11230AC1042F397D00ED27340D39C6F020015FCE0026
S11BB9B000DFEADFECCE00EA8D252517C6046801690024037C00ED5ABB
S11BB9C826F4AA01A7017C00EC20E5811826020D39DEEAD6EC0C39BDF6
S11BB9E0B86681302BF181392F0D5D2BEA81412BE681462EE280078443
S11BB9F80F5F398D9D2F52DEEA812F2704812026488D77DFE83C5F8D3C
S11BBA109C38253E2707D6EBBDBA982535810D2731812C26030820E3C4
S11BBA28812026030820DA810A260608BDBAB7200D815E2603092004E7
S11BBA40812F260D8D6DDFE8CE00E88D2CDEE820B80D39BDBD0325F958
S11BBA58DCEA83000193E8C17F22054D270620E981FF26E5D7EC8D4305
S11BBA70CE00EC8D078D3C20CF8D07088D048620203AA600368D0332E9
S11BBA88200444444444840F8B90198940192024E700E10027B4CEBF51
S11BBAA0B88D0C20AC8D1508A600810426F7398D0220F5860A8D0586F6
S11BBAB80D8D014F7EB8928D668DF0CE00EE5F3CCEBFD23AA6008D62CB
S11BBAD0A601387D00E1270B4D27038DA5088D9C082004378D0833CB1B
S11BBAE802C10C26DA39363CBDB9AD3833251B271DBDB98B26145D27F7
S11BBB000936DCEAED0032082004D6EBE700810D261338334F398120D6
S11BBB1826F85D2605BDBA7C2003BDBA7908398D8A7C00E18D957F000F
S11BBB30E1398D02862D7EB892810D270F812D2716BDB99A230F810D56
S11BBB48260BDFF7BDBAB3CE00F77EBA790D39BDB866810D26F74F5FC0
S11BBB60DDF720E8810D270EBDB99A23E8810D26E47F00FDDFEEBDBAB7
S11BBB78B396FD2603BDBC2A2015CE00012009810D27F7BDB9AD2FC5AF
S11BBB90DFFB27C17C00FD2048C618DE093ADF0B397C00088DF3308E12
S11BBBA800DA8D56BDBC1ADEFB26097F00FD8D72251D202509DFFB261E
S11BBBC0037F00FDCE0000BDBCEE27F1CEBFCEBDBAAFDEEABDBA7CBDA4
S11BBBD8BB2996FD26037EB8FA9EF5DEEE3CDEF03CDCF2363796F436E1
S11BBBF096FD270DDEEEDFEA860297017A00088D983BA60097F4EC01BD
S11BBC0897F3D7F2EC03DDF0EC05DDEEC6063ADFF53996FA270B96F9F1
S11BBC20DEF72702A7007F00FA3996FA265CDEF7270DA600C63FBDBA74
S11BBC3898250497F997FA39308E00DA8DBCDEEE09DFEEDFEA96FA27D2
S11BBC50098DC79CEA26034C20044F5FDDFB97FDBDBB277EB8FADEE8AD
S11BBC683C810D270A8D7C2316DFE8810D2615DCE8C4F0830010DDE823
S11BBC80C30020DDEA201938DFE80D398D5D23F7DCE8C4F0D7E993EAC7
S11BBC9822ED96EB84F097EBBDBAB38D49260538DFE84F39BDBAB3CE60
S11BBCB000E8BDBA79DEE8C610BDBA7C085A26F9BDBA7EC610DEE8A659
S11BBCC800847F81202D0481612D02862EBDB892085A26EBDCEA93E80B
S11BBCE027C5DFE87D00E926BA20B57EB99A36BDB87B847F81172607BB
S11BBCF8BDB87B24FB847F81183239810D27128DE2230EDFE8810D2737
S11BBD10088DD82304810D27010D397F00E78DE325F8BDBAB38610973D
S11BBD28FF4CD6E726014CBDB892BDBD5E4636CEBFA8BDB8B6BDBCEE62
S11BBD40BDBCEE7F00FF324939C601D7E7CE0000DFEA810D27CC8DB96B
S11BBD5820C8C6FF20ED5D2758DCEADDE8BDB866815326F9BDB8668184
S11BBD70392731813126F17F00E18D29C002D7EC8D23378D2032D3E841
S11BBD883736388D187A00EC270E7D00E72B02E700E10026060820EB22
S11BBDA04C27C20D395FBDB9DFC6103D375FBDB9DF331B169BE197E102
S11BBDB839C6194FBDB8925A26F9DCEAD0E992E82604C1182502C61788
S11BBDD0CB04D7E7C003D7ECCEBFBFBDBAAF5FCE00E78D29CE00E88DC5
S11BBDE824088D21DEE88D1D087A00EC26F8DFE85337308D1033DEE852
S11BBE00099CEA26BDCEBFC2BDBAAF4F39EB007EBA82810D2773BDBD70
S11BBE18039CE8256CCCFF869714D7ECDEE80908E60027054F8D0F273C
S11BBE30089CEA26F27F00FE397F00FE0D3936373CD6EC2A08CEBFEAC3
S11BBE48BDBAAFC40F2605C606BDBAB330BDBA7908BDBA82862FBDB879
S11BBE609208BDBA7CBDBA7E5A38D7EC3332BDBCEE39CEBFE43CBDBAC6
S11BBE78AFBDB86638815939810D2705BDBF0624020D39BDBE1DD6ECD7
S11BBE902B07CEBFDE8DDE26F08DD726EC86FE9714DEE83CDEDD093CD1
S11BBEA8389CDF26137D00FE2B8338DFE88DBB27FC814E26F87EBF4F86
S11BBEC008A6003CDEE87D00FE2B1AA70086FC97149608DCDBD309DD14
S11BBED80B9608844027FA86FE9714200DE600112708BDBE3E26033824
S11BBEF020BB08DFE820B1BDB99A2F8DDFDD810D2787BDBD03398DEFC5
S11BBF08250EDCE8DDDF81F82406DFE893DD24037EBE89D3E825F9DDEE
S11BBF20EADCDD81F824F196E881F825EB0C398DC625E5DEDD0908A6B9
S11BBF38003CDEEAA70008DFEA389CE826F039810D27528DB9254ECCDA
S11BBF50FF869714D7ECD7FE7EBEA4302920322E3435202031292034FD
S11BBF682E39310D0A5854414C3D04CEBF5BBDBAAF8630D6DBC17727C0
S11BBF80014CBDB892BDBA7EBDB866810D2712CE77EA80302709CEEFEE
S11BBF98EA810127020D39DFDB0C39103A1039041413043F0450524FBD
S11BBFB042554720312E30044E4F20434847045331045339303330307A
S11BBFC8303046430D044F502D04500158014100420043005301434844
S11BBFE0473F20045057523F2004414452204550522F56414C0D0A0434
S10BBFF8009ABC40BBA1B80093
S9030000FC
« Last Edit: May 17, 2019, 12:04:43 pm by bytestorm »
 

Offline bytestormTopic starter

  • Regular Contributor
  • *
  • Posts: 64
  • Country: se
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #51 on: May 17, 2019, 11:57:41 am »
If an instruction says that it takes for example 3 bytes, like a JMP.. That means including the JMP right? (7E in this case)
Yes. 1 byte for the opcode, 2 bytes for the operand (in this case, destination address). The instruction format summary tables will show you this.

I posted a link to the probug.s19 on the first page of this thread, but it's not necessarily the same version as in that PDF.

Yeah I realised that after a while... haha  :palm: . I was so busy to try and understand it that it didnt occur to me that they could actually be 2 different programs.. and they were.. lol

But nevertheless I thought that I atleast should be able to find the adresses since they are fixed... but that didnt turn out so well.
 

Offline Circlotron

  • Super Contributor
  • ***
  • Posts: 3212
  • Country: au
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #52 on: May 17, 2019, 12:32:09 pm »
Or I could try and learn assembly for the 680x but seems to be difficult to find usable software in win10 to compile it for the 6801..
I think any 8 bit 68xx assembler would do the job. The assembly language listing contains absolute addresses and so as long as you know where your config and IO registers are, where ram starts, where eprom starts, where the vector table is, you should be right. It's all in the data sheet. Only the list file that is optionally produced will be wrong because it may not show the correct amount of cycles for each instruction. The S19 file should be just fine.

ICS08JLZ from P&E Micro is free and should do the trick

http://www.pemicro.com/support/download_processor.cfm?type=2
 
The following users thanked this post: bytestorm

Offline bytestormTopic starter

  • Regular Contributor
  • *
  • Posts: 64
  • Country: se
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #53 on: May 17, 2019, 01:36:55 pm »
Or I could try and learn assembly for the 680x but seems to be difficult to find usable software in win10 to compile it for the 6801..
I think any 8 bit 68xx assembler would do the job. The assembly language listing contains absolute addresses and so as long as you know where your config and IO registers are, where ram starts, where eprom starts, where the vector table is, you should be right. It's all in the data sheet. Only the list file that is optionally produced will be wrong because it may not show the correct amount of cycles for each instruction. The S19 file should be just fine.

ICS08JLZ from P&E Micro is free and should do the trick

http://www.pemicro.com/support/download_processor.cfm?type=2

Ah, so the compiler itself doesnt need to support the cpu, only if I try to dissassemble a made file? hmm.. cant run the software, just crashes with an error saying need to set %FILE% ?
Well, I might find something else, as long as it doesnt need to be a specific 6801 asm compiler?
 

Offline Circlotron

  • Super Contributor
  • ***
  • Posts: 3212
  • Country: au
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #54 on: May 17, 2019, 02:14:11 pm »
You might have to run the programming (and installation) software in WinNT or Win98 compatibility mode. It’s pretty old.
 

Offline grantb5

  • Regular Contributor
  • *
  • Posts: 139
  • Country: ca
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #55 on: May 17, 2019, 02:33:24 pm »
There are lots of assemblers available. And disassemblers too, but I think doing it by hand, at least for a while is good experience.

The JMP's you see are probably a jump table for various commands or some condition. No doubt the address of the first JMP will appear later in the program.  The bytes after the JMP table look like they may be something other than just executable code. It could be parameters for the JMP commands you typed. If you look it seems there might be a pattern:

04 42 BB 39
04 44 BC 66
04 47 BB 64
04 4C BD 49
04 4D B9 FB
05 4D 56 BF 2F
04 4F BA 53
04 ...

Hard to say what's going on here, but isn't the source code available?  These could be addresses of strings that go with the JMPs or something?  One nice thing about loading the S19 file into an EPROM programmer is that the ASCII text becomes obvious.
 

Offline joeqsmith

  • Super Contributor
  • ***
  • Posts: 11894
  • Country: us
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #56 on: May 17, 2019, 03:34:12 pm »
Sorry, I wasn't following along close enough.  I assumed you would have built the programmer shown in Byte and used that code they provided to program your parts.   I wasn't thinking you were still looking at the debugger.   

If the goal is still just to program a few parts, what do you need the debugger for? 




Offline bytestormTopic starter

  • Regular Contributor
  • *
  • Posts: 64
  • Country: se
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #57 on: May 17, 2019, 03:39:54 pm »
There are lots of assemblers available. And disassemblers too, but I think doing it by hand, at least for a while is good experience.

The JMP's you see are probably a jump table for various commands or some condition. No doubt the address of the first JMP will appear later in the program.  The bytes after the JMP table look like they may be something other than just executable code. It could be parameters for the JMP commands you typed. If you look it seems there might be a pattern:

04 42 BB 39
04 44 BC 66
04 47 BB 64
04 4C BD 49
04 4D B9 FB
05 4D 56 BF 2F
04 4F BA 53
04 ...

Hard to say what's going on here, but isn't the source code available?  These could be addresses of strings that go with the JMPs or something?  One nice thing about loading the S19 file into an EPROM programmer is that the ASCII text becomes obvious.

ah thats true... I need to read some more about JMP and following bytes. See what they could be..
No, the source code for the PRObug.s19 is nowhere to be found.. the best I got so far was a article from a magazine that have the listing for a "similar" program.
 

Offline bytestormTopic starter

  • Regular Contributor
  • *
  • Posts: 64
  • Country: se
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #58 on: May 17, 2019, 03:44:41 pm »
Sorry, I wasn't following along close enough.  I assumed you would have built the programmer shown in Byte and used that code they provided to program your parts.   I wasn't thinking you were still looking at the debugger.   

If the goal is still just to program a few parts, what do you need the debugger for?

No I didnt build it yet in case I never find a suitable way of actually programming it... I am still stuck at how to modify the PRObug or that other program to actually work with the 68701u4.. the only availible one only works with the regular 68701.. but the U4 part has double the eprom area, and I need to somehow modify the PRObug code OR the code in Byte to program the 68701U4 instead of the 68701.

It was more difficult than I ever imagined hahaha... just to modify 3 places in the PRObug code... but I cant for the life of me find the known ones in the program as it is now.

I dont need any debugger, just program some parts
 

Offline joeqsmith

  • Super Contributor
  • ***
  • Posts: 11894
  • Country: us
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #59 on: May 17, 2019, 04:07:06 pm »
Sorry, I wasn't following along close enough.  I assumed you would have built the programmer shown in Byte and used that code they provided to program your parts.   I wasn't thinking you were still looking at the debugger.   

If the goal is still just to program a few parts, what do you need the debugger for?

No I didnt build it yet in case I never find a suitable way of actually programming it... I am still stuck at how to modify the PRObug or that other program to actually work with the 68701u4.. the only availible one only works with the regular 68701.. but the U4 part has double the eprom area, and I need to somehow modify the PRObug code OR the code in Byte to program the 68701U4 instead of the 68701.

It was more difficult than I ever imagined hahaha... just to modify 3 places in the PRObug code... but I cant for the life of me find the known ones in the program as it is now.

I dont need any debugger, just program some parts

I figured you would just change the couple of pointers in the Byte source and assemble it.   If I had a couple of U4 parts, I would give it a try for you.

Offline bytestormTopic starter

  • Regular Contributor
  • *
  • Posts: 64
  • Country: se
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #60 on: May 17, 2019, 04:38:34 pm »
Sorry, I wasn't following along close enough.  I assumed you would have built the programmer shown in Byte and used that code they provided to program your parts.   I wasn't thinking you were still looking at the debugger.   

If the goal is still just to program a few parts, what do you need the debugger for?

No I didnt build it yet in case I never find a suitable way of actually programming it... I am still stuck at how to modify the PRObug or that other program to actually work with the 68701u4.. the only availible one only works with the regular 68701.. but the U4 part has double the eprom area, and I need to somehow modify the PRObug code OR the code in Byte to program the 68701U4 instead of the 68701.

It was more difficult than I ever imagined hahaha... just to modify 3 places in the PRObug code... but I cant for the life of me find the known ones in the program as it is now.

I dont need any debugger, just program some parts

I figured you would just change the couple of pointers in the Byte source and assemble it.   If I had a couple of U4 parts, I would give it a try for you.

Thats what I am hoping to find... I know what I need to change, and I know what is should be written there now... but as I said, I cant see it in the file.. I can not find the places to change the external and internal eprom areas. external eprom is fixed at 7800-7FFF för example as mentioned before. But I can not find any references to that in the s19 file. And thats the only source I have..

I dont know if you mean that I could copy the LIST file in the byte magazine? thats not the source asm, if I understand correct.. I dont even have any software that is working in win 10 to compile at the moment even if I had the asm :(
 

Offline bytestormTopic starter

  • Regular Contributor
  • *
  • Posts: 64
  • Country: se
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #61 on: May 17, 2019, 04:41:29 pm »
the text in the byte magazine looks like this:

00027A   B850   8E   00FF   A   START   LDS   #$FF   INITIALIZE STACK

can I just copy the raw code part and compile that?

B850   8E   00FF

or would I write like this?

LDS   #$FF
 

Offline joeqsmith

  • Super Contributor
  • ***
  • Posts: 11894
  • Country: us
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #62 on: May 17, 2019, 04:52:03 pm »
Sorry, I wasn't following along close enough.  I assumed you would have built the programmer shown in Byte and used that code they provided to program your parts.   I wasn't thinking you were still looking at the debugger.   

If the goal is still just to program a few parts, what do you need the debugger for?

No I didnt build it yet in case I never find a suitable way of actually programming it... I am still stuck at how to modify the PRObug or that other program to actually work with the 68701u4.. the only availible one only works with the regular 68701.. but the U4 part has double the eprom area, and I need to somehow modify the PRObug code OR the code in Byte to program the 68701U4 instead of the 68701.

It was more difficult than I ever imagined hahaha... just to modify 3 places in the PRObug code... but I cant for the life of me find the known ones in the program as it is now.

I dont need any debugger, just program some parts

I figured you would just change the couple of pointers in the Byte source and assemble it.   If I had a couple of U4 parts, I would give it a try for you.

Thats what I am hoping to find... I know what I need to change, and I know what is should be written there now... but as I said, I cant see it in the file.. I can not find the places to change the external and internal eprom areas. external eprom is fixed at 7800-7FFF för example as mentioned before. But I can not find any references to that in the s19 file. And thats the only source I have..

I dont know if you mean that I could copy the LIST file in the byte magazine? thats not the source asm, if I understand correct.. I dont even have any software that is working in win 10 to compile at the moment even if I had the asm :(

The list is pretty much the source.  It just includes more data as it's been assembled.   Yes, I am saying type that back in, change the pointers and reassemble it.  You will need to setup DOSBOX to get the tools working.   

the text in the byte magazine looks like this:

00027A   B850   8E   00FF   A   START   LDS   #$FF   INITIALIZE STACK

can I just copy the raw code part and compile that?

B850   8E   00FF

or would I write like this?

LDS   #$FF


You would use:

START   LDS   #$FF   INITIALIZE STACK

Maybe feed it to an OCR. 

 
The following users thanked this post: bytestorm

Offline bytestormTopic starter

  • Regular Contributor
  • *
  • Posts: 64
  • Country: se
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #63 on: May 17, 2019, 05:11:00 pm »
Sorry, I wasn't following along close enough.  I assumed you would have built the programmer shown in Byte and used that code they provided to program your parts.   I wasn't thinking you were still looking at the debugger.   

If the goal is still just to program a few parts, what do you need the debugger for?

No I didnt build it yet in case I never find a suitable way of actually programming it... I am still stuck at how to modify the PRObug or that other program to actually work with the 68701u4.. the only availible one only works with the regular 68701.. but the U4 part has double the eprom area, and I need to somehow modify the PRObug code OR the code in Byte to program the 68701U4 instead of the 68701.

It was more difficult than I ever imagined hahaha... just to modify 3 places in the PRObug code... but I cant for the life of me find the known ones in the program as it is now.

I dont need any debugger, just program some parts

I figured you would just change the couple of pointers in the Byte source and assemble it.   If I had a couple of U4 parts, I would give it a try for you.

Thats what I am hoping to find... I know what I need to change, and I know what is should be written there now... but as I said, I cant see it in the file.. I can not find the places to change the external and internal eprom areas. external eprom is fixed at 7800-7FFF för example as mentioned before. But I can not find any references to that in the s19 file. And thats the only source I have..

I dont know if you mean that I could copy the LIST file in the byte magazine? thats not the source asm, if I understand correct.. I dont even have any software that is working in win 10 to compile at the moment even if I had the asm :(

The list is pretty much the source.  It just includes more data as it's been assembled.   Yes, I am saying type that back in, change the pointers and reassemble it.  You will need to setup DOSBOX to get the tools working.   

the text in the byte magazine looks like this:

00027A   B850   8E   00FF   A   START   LDS   #$FF   INITIALIZE STACK

can I just copy the raw code part and compile that?

B850   8E   00FF

or would I write like this?

LDS   #$FF


You would use:

START   LDS   #$FF   INITIALIZE STACK

Maybe feed it to an OCR.

OH sweet! I somehow thought that the "listing" is something else than source.. but today when I converted it back from s19 it felt very similar :)

I will get dosbox going and try to find a suitable compiler!

 

Offline joeqsmith

  • Super Contributor
  • ***
  • Posts: 11894
  • Country: us
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #64 on: May 17, 2019, 06:03:39 pm »
Start by entering the code and then we can get the assembler and other tools working.   I tried an on-line OCR but it was very poor.  You may have to type it.  We want everything from the * and to the right as follows:

OPT Z01,LLEM=80
* THIS PROGRAM WILL CHECK, PROGRAM AND VERIFY
* THE MC68701'S EPROM
*
* EQUATES
P1DDR   EQU     $00     PORT 1 DATA DIR. REGISTER
P1DR    EQU     $02     PORT 1 DATA REGISTER
TCSR    EQU     $08     TIMER CONTROL/STAT REGISTER
TIMER   EQU     $09     COUNTER REGISTER
OUTCMP  EQU     $0B     OUTPUT COMPARE REGISTER
EPMCNT  EQU     $14     RAM/EROM CONTROL REGISTER
*
*  LOCAL VARIABLES
*
        ORG     $80
IMBEG   RMB     2       START OF MEMORY BLOCK
IMEND   RMB     2       LAST BYTE OF MEMORY BLOCK
PNTR    RMB     2       FIRST BYTE OF EPROM TO BE PGM'D
WAIT    RMB     2       COUNTER VALUE
*
        ORG     $B850
START   LDS     #$FF    INITIALIZE STACK
 
The following users thanked this post: bytestorm

Offline bytestormTopic starter

  • Regular Contributor
  • *
  • Posts: 64
  • Country: se
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #65 on: May 17, 2019, 06:21:15 pm »
Start by entering the code and then we can get the assembler and other tools working.   I tried an on-line OCR but it was very poor.  You may have to type it.  We want everything from the * and to the right as follows:

OPT Z01,LLEM=80
* THIS PROGRAM WILL CHECK, PROGRAM AND VERIFY
* THE MC68701'S EPROM
*
* EQUATES
P1DDR   EQU     $00     PORT 1 DATA DIR. REGISTER
P1DR    EQU     $02     PORT 1 DATA REGISTER
TCSR    EQU     $08     TIMER CONTROL/STAT REGISTER
TIMER   EQU     $09     COUNTER REGISTER
OUTCMP  EQU     $0B     OUTPUT COMPARE REGISTER
EPMCNT  EQU     $14     RAM/EROM CONTROL REGISTER
*
*  LOCAL VARIABLES
*
        ORG     $80
IMBEG   RMB     2       START OF MEMORY BLOCK
IMEND   RMB     2       LAST BYTE OF MEMORY BLOCK
PNTR    RMB     2       FIRST BYTE OF EPROM TO BE PGM'D
WAIT    RMB     2       COUNTER VALUE
*
        ORG     $B850
START   LDS     #$FF    INITIALIZE STACK


Do I need the same spacing? looks like a "tab" between every typed word? or is a regular space enough? It looks formatted almost..
 

Offline joeqsmith

  • Super Contributor
  • ***
  • Posts: 11894
  • Country: us
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #66 on: May 17, 2019, 06:35:44 pm »
Space or tab should be fine.    I tried running the tools under DOSBOX and it seems fine.  Once you have the source code entered, just upload it here and I will make sure it assembles.  We can then get you setup with the tools. 





M6801 Portable Cross Assembler  0.05   MS-DOS/PC-DOS  Page 1
 Fri May 17 14:30:42 2019
Command line:
 C:\6801\PASM01.EXE -dxs -l byte_pgm.lst byte_pgm.asm
Options list:
ON  - b - Printing of macro definitions
ON  - c - Printing of macro calls
ON  - d - Placing of symbolic debugging information in COFF  (changed)
OFF - e - Printing of macro expansions
ON  - f - Printing of conditional directives
OFF - g - Printing of generated constants list
OFF - q - Expanding and printing of structured syntax
ON  - s - Printing of symbol table  (changed)
OFF - u - Printing of conditional unassembled source
ON  - x - Printing of cross reference table  (changed)
OFF - m - Suppress printing of error messages
ON  - w - Printing of warning messages
OFF - v - Suppress printing of updated status
OFF - y - Enabling of sgs extensions
ON  - o - Create object code
ON  -   - Formatting of source line listing
Create listing file - l - byte_pgm.lst
 
Xdefs:
  NONE
 
Xrefs:
  NONE

Input file(s): byte_pgm.asm (27 lines)
 
Output file: byte_pgm.o 
Listing file: byte_pgm.lst

M6801 Portable Cross Assembler  0.05  byte_pgm.asm  Page 2
 Fri May 17 14:30:42 2019 
Options - MD,MC,NOG,NOU,W,NOMEX,CL,FMT,O
 
LINE   S PC   OPCO OPERANDS S LABEL    MNEMO OPERANDS COMMENT
00001                         * THIS PROGRAM WILL CHECK, PROGRAM AND VERIFY
00002                         * THE MC68701'S EPROM
00003                         *
00004                         * EQUATES
00005  P 0000      0000     A P1DDR    EQU   $00      PORT 1 DATA DIR. REGISTER
00006  P 0000      0002     A P1DR     EQU   $02      PORT 1 DATA REGISTER
00007  P 0000      0008     A TCSR     EQU   $08      TIMER CONTROL/STAT REGISTER
00008  P 0000      0009     A TIMER    EQU   $09      COUNTER REGISTER
00009  P 0000      000b     A OUTCMP   EQU   $0B      OUTPUT COMPARE REGISTER
00010  P 0000      0014     A EPMCNT   EQU   $14      RAM/EROM CONTROL REGISTER
00011                         *
00012                         *  LOCAL VARIABLES
00013                         *
00014  A 0080                          ORG   $80     
00015  A 0080      02       A IMBEG    RMB   2        START OF MEMORY BLOCK
00016  A 0082      02       A IMEND    RMB   2        LAST BYTE OF MEMORY BLOCK
00017  A 0084      02       A PNTR     RMB   2        FIRST BYTE OF EPROM TO BE PGM'D
00018  A 0086      02       A WAIT     RMB   2        COUNTER VALUE
00019                         *
00020  A b850                          ORG   $B850   
00021  A b850 8e   00ff     A START    LDS   #$FF     INITIALIZE STACK
00022  A b853 86   07       A          LDAA  #$07     INIT. PORT 1
00023  A b855 97   00       A          STAA  P1DDR    DDR
00024  A b857 97   02       A          STAA  P1DR     DATA REGISTER (ALL LED'S OFF)
00025                         *  *
00026  A b859 ce   f800     A          LDX   #$F800   CHECK IF EPROM ERASED
00027                                  END           



Total number of errors: 0
Total number of warnings: 0
Total number of lines: 27
 
 
Number of bytes in section ASCT: 20

Number of bytes in program: 20
 
           CROSS REFERENCE TABLE
NAME    ATTRB S VALUE P:LINE LINE1....N
 
EPMCNT   EQU  A 0014  2:10       
IMBEG         A 0080  2:15       
IMEND         A 0082  2:16       
OUTCMP   EQU  A 000b  2:9         
P1DDR    EQU  A 0000  2:5           23
P1DR     EQU  A 0002  2:6           24
PNTR          A 0084  2:17       
START         A b850  2:21       
TCSR     EQU  A 0008  2:7         
TIMER    EQU  A 0009  2:8         

M6801 Portable Cross Assembler  0.05     Page 3
 Fri May 17 14:30:42 2019 
 
           CROSS REFERENCE TABLE
NAME    ATTRB S VALUE P:LINE LINE1....N
 
WAIT          A 0086  2:18       

Offline grantb5

  • Regular Contributor
  • *
  • Posts: 139
  • Country: ca
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #67 on: May 17, 2019, 06:57:25 pm »
M6801 Portable Cross Assembler  0.05   MS-DOS/PC-DOS  Page 1
 Fri May 17 14:30:42 2019
Command line:
 C:\6801\PASM01.EXE -dxs -l byte_pgm.lst byte_pgm.asm
 


Which assembler is this?  I thought I'd seen them all.  :)
 

Offline bytestormTopic starter

  • Regular Contributor
  • *
  • Posts: 64
  • Country: se
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #68 on: May 17, 2019, 07:08:17 pm »
M6801 Portable Cross Assembler  0.05   MS-DOS/PC-DOS  Page 1
 Fri May 17 14:30:42 2019
Command line:
 C:\6801\PASM01.EXE -dxs -l byte_pgm.lst byte_pgm.asm
 


Which assembler is this?  I thought I'd seen them all.  :)

haha actually lookin for this one too.. couldnt find it thou
 

Offline joeqsmith

  • Super Contributor
  • ***
  • Posts: 11894
  • Country: us
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #69 on: May 17, 2019, 08:01:03 pm »
This was Motorola's. 

Back in the early days of the 01, we had an Exormax, Exorsizer (Motorola) and several HP 64000 I think stations.  I couldn't afford such tools for my hobby so I designed and built my own ICE for the 01.  I think it handles the U4.  I rolled my own assembler and disassembler for it.  These were built into the DOS based front end.  You could do breakpoints, single step and such.   It even had a couple of trigger outputs to drive a scope.   It may be fun to make a video of it someday. Should be good for a few laughs.   

Offline grantb5

  • Regular Contributor
  • *
  • Posts: 139
  • Country: ca
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #70 on: May 17, 2019, 09:10:45 pm »
Oh that's nice.  Some of us are still working at the trailing edge of technology.   ;D

I just started working on a 6303 ROM Monitor for an expanded bus system. It also has breakpoints and single-stepping but I'd much prefer an ICE that can get-out-of-the-way versus a ROM monitor.
 

Offline joeqsmith

  • Super Contributor
  • ***
  • Posts: 11894
  • Country: us
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #71 on: May 17, 2019, 09:42:46 pm »
Interesting.  If you have a blog, I would like to read more about it.

I went as far as designing a clone of the 01 on an FPGA.  It then grew to an 11, then to some crazy thing with some custom op-codes.   I think the last thing I was attempting to do was add a hardware multiply but it seems the FPGAs of the time were just too limited.


You can see some of my homemade development boards here:
https://youtu.be/C8txvmXUIJQ?t=493
« Last Edit: May 17, 2019, 09:45:54 pm by joeqsmith »
 

Offline bytestormTopic starter

  • Regular Contributor
  • *
  • Posts: 64
  • Country: se
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #72 on: May 18, 2019, 11:09:45 am »
There.. I think its done. Will double check it when I get home, but I think its correct..

Things that have changed is the internal eprom size and external eprom area..

68701 have 7800-7FFF
68701u4 have 7000-7FFF

also ät the area in the bytebug "START NEW CODE" there was a reference to 7800.. I am not sure what that does but changed it to 7000. (is it for verifying?)      
LDX   #$7000 SET UP POINTER

anyway, please have a look in the attachment if you like :)

 

Offline joeqsmith

  • Super Contributor
  • ***
  • Posts: 11894
  • Country: us
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #73 on: May 19, 2019, 12:26:39 am »
Double check your work.   I plan to do the same. 


00134                         **
00135                         * R E S T A R T   A N D   I N T R. V E C.
00136                         *
00137                         
00138  A bff0                          ORG   $BFF0   
00139  A bff0      b8f1     A          FDB   SELF     
00140  A bff2      b8f1     A          FDB   SELF     
00141  A bff4      b8f1     A          FDB   SELF     
00142                           FDR SELF
***** --------------------------^
***** error  40: Unrecognized mnemonic or undefined macro 'FDR     '

Offline joeqsmith

  • Super Contributor
  • ***
  • Posts: 11894
  • Country: us
Re: Self-Programming the MC68701 and the MC68701U4? (motorola)
« Reply #74 on: May 19, 2019, 12:44:50 am »
I corrected the error, rechecked your work and changed the index back.   I reformatted things just so they line up to make it easier to read.    I ran it through if you want to check the listing file below.   I also included the S record.  Do you have a PROM programmer and part to load this code into?   If so, I think it's time to build up the circuit.   If you need help understanding how to build it, let me know.  You could do this on some white board for the small number of parts you want to program. 



S00A000042595445425547E3
S10B0080000000000000000074
S123B8508E00FF860797009702CEF800DF84C600A6001126298CFFFF27030820F3860697A3
S123B87002DF86CE004609CCC350D3097F0008DD0B8640950827FC8C000026EA20068683B5
S123B8909702205DCE7000DF80CE7FFFDF82CEC350DF86DE843CDE803C86FE9714A600DE03
S123B8B084A70008DF8486FC9714DC86D3097F0008DD0B8640950827FC38089C8223D9869E
S123B8D0FF971438DF84CE70003CA600DE84E60011261008DF8438088C800026EC868497F6
S10CB8F00220FE8682970220F872
S113BFF0B8F1B8F1B8F1B8F1B8F1B8F1B8F1B85096
S9030000FC

 

M6801 Portable Cross Assembler  0.05   MS-DOS/PC-DOS  Page 1
 Sat May 18 20:37:13 2019
Command line:
 C:\6801\PASM01.EXE -dxs -l BYTEBUG.lst BYTEBUG.asm
Options list:
ON  - b - Printing of macro definitions
ON  - c - Printing of macro calls
ON  - d - Placing of symbolic debugging information in COFF  (changed)
OFF - e - Printing of macro expansions
ON  - f - Printing of conditional directives
OFF - g - Printing of generated constants list
OFF - q - Expanding and printing of structured syntax
ON  - s - Printing of symbol table  (changed)
OFF - u - Printing of conditional unassembled source
ON  - x - Printing of cross reference table  (changed)
OFF - m - Suppress printing of error messages
ON  - w - Printing of warning messages
OFF - v - Suppress printing of updated status
OFF - y - Enabling of sgs extensions
ON  - o - Create object code
ON  -   - Formatting of source line listing
Create listing file - l - BYTEBUG.lst
 
Xdefs:
  NONE
 
Xrefs:
  NONE

Input file(s): BYTEBUG.asm (142 lines)
 
Output file: BYTEBUG.o 
Listing file: BYTEBUG.lst

M6801 Portable Cross Assembler  0.05  BYTEBUG.asm  Page 2
 Sat May 18 20:37:13 2019 
Options - MD,MC,NOG,NOU,W,NOMEX,CL,FMT,O
 
LINE   S PC   OPCO OPERANDS S LABEL    MNEMO OPERANDS COMMENT
00001                         *
00002                         *
00003                         * THIS PROGRAM WILL CHECK, PROGRAM AND VERIFY
00004                         * THE MC68701U4 ' S EPROM.
00005                         *
00006                         *
00007                         *         E Q U A T E S
00008  P 0000      0000     A P1DDR    EQU   $00      PORT 1 DATA DIR. REGISTER
00009  P 0000      0002     A P1DR     EQU   $02      PORT 1 DATA REGISTER
00010  P 0000      0008     A TCSR     EQU   $08      TIMER CONTROL/STAT REGISTER
00011  P 0000      0009     A TIMER    EQU   $09      COUNTER REGISTER
00012  P 0000      000b     A OUTCMP   EQU   $0B      OUTPUT COMPARE REGISTER
00013  P 0000      0014     A EPMCNT   EQU   $14      RAM/EROM CONTROL REGISTER
00014                         *
00015                         *         L O C A L       V A R I A B L E S
00016                         *
00017  A 0080                          ORG   $80     
00018  A 0080      02       A IMBEG    RMB   2        START OF MEMORY BLOCK
00019  A 0082      02       A IMEND    RMB   2        LAST BYTE OF MEMORY BLOCK
00020  A 0084      02       A PNTR     RMB   2        FIRST BYTE OF EPROM TO RE PGM'D
00021  A 0086      02       A WAIT     RMB   2        COUNTER VALUE
00022                         *
00023  A b850                          ORG   $B850   
00024  A b850 8e   00ff     A START    LDS   #$FF     INITIALIZE STACK
00025  A b853 86   07       A          LDAA  #$07     INIT. PORT 1
00026  A b855 97   00       A          STAA  P1DDR    DDR
00027  A b857 97   02       A          STAA  P1DR     DATA REGISTER (ALL LED'S OFF)
00028                         **
00029  A b859 ce   f800     A          LDX   #$F800   CHECK IF EPROM ERASED
00030  A b85c df   84       A          STX   PNTR     INIT. PNTR WHILE CONVENIENT
00031  A b85e c6   00       A          LDAB  #$00     GET READY FOR CMPR.
00032  A b860 a6   00       A ERASE    LDAA  0,X      LOAD EPROM CONTENTS
00033  A b862 11                       CBA            COMPARE TO ZERO
00034  A b863 26   29    b88e          BNE   ERROR1   BRANCH IF NOT ZERO
00035  A b865 8c   ffff     A          CPX   #$FFFF   
00036  A b868 27   03    b86d          BEQ   NEXT     IF SO BRANCH
00037  A b86a 08                       INX            GO AGAIN
00038  A b86b 20   f3    b860          BRA   ERASE   
00039                         **
00040  A b86d 86   06       A NEXT     LDAA  #$06     TURN ON ERASED LED
00041  A b86f 97   02       A          STAA  P1DR     
00042                         **
00043                         * WAIT FOR VPP TO REACH 21V (3.5 SEC.)
00044                         *
00045  A b871 df   86       A          STX   WAIT     
00046  A b873 ce   0046     A          LDX   #$0046   
00047  A b876 09              STALL1   DEX           
00048  A b877 cc   c350     A          LDD   #$C350   INIT. 50MS LOOP
00049  A b87a d3   09       A          ADDD  TIMER    BUMP CURRENT VALUE
00050  A b87c 7f   0008     A          CLR   TCSR     CLEAR OCF
00051  A b87f dd   0b       A          STD   OUTCMP   SET OUTPUT COMPARE
00052  A b881 86   40       A          LDAA  #$40     NOW WAIT FOR OFC

M6801 Portable Cross Assembler  0.05  BYTEBUG.asm  Page 3
 Sat May 18 20:37:13 2019 
Options - MD,MC,NOG,NOU,W,NOMEX,CL,FMT,O
 
LINE   S PC   OPCO OPERANDS S LABEL    MNEMO OPERANDS COMMENT
00053  A b883 95   08       A STALL2   BITA  TCSR     
00054  A b885 27   fc    b883          BEQ   STALL2   NOT YET
00055  A b887 8c   0000     A          CPX   #$0000   70 TIMES YET?
00056  A b88a 26   ea    b876          BNE   STALL1   NOPE
00057  A b88c 20   06    b894          BRA   PGINT   
00058                         **
00059  A b88e 86   83       A ERROR1   LDAA  #$83     LIGHT ERROR LED ONLY
00060  A b890 97   02       A          STAA  P1DR     
00061  A b892 20   5d    b8f1          BRA   SELF     
00062                         **
00063  A b894 ce   7000     A PGINT    LDX   #$7000   INIT. IMBEG
00064  A b897 df   80       A          STX   IMBEG   
00065  A b899 ce   7fff     A          LDX   #$7FFF   INIT. IMEND
00066  A b89c df   82       A          STX   IMEND   
00067  A b89e ce   c350     A          LDX   #$C350   INIT. WAIT (4.0 MHZ)
00068  A b8a1 df   86       A          STX   WAIT     
00069                         *
00070                         * THIS PART FROM 68701U4 DATA SHEET
00071                         *
00072  A b8a3 de   84       A EPROM    LDX   PNTR     SAVE CALLING ARGUMENT
00073  A b8a5 3c                       PSHX           RESTORE WHEN DONE
00074  A b8a6 de   80       A          LDX   IMBEG    USE STACK
00075                         *
00076  A b8a8 3c              EPRO02   PSHX           SAVE POINTER ON STACK
00077  A b8a9 86   fe       A          LDAA  #$FE     REMOVE VPP, SET LATCH
00078  A b8ab 97   14       A          STAA  EPMCNT   PPC=1,PLC=0
00079  A b8ad a6   00       A          LDAA  0,X      MOVE DATA MEMORY-TO-LATCH
00080  A b8af de   84       A          LDX   PNTR     GET WHERE TO PUT IT
00081  A b8b1 a7   00       A          STAA  0,X      STASH AND LATCH
00082  A b8b3 08                       INX            NEXT ADDR.
00083  A b8b4 df   84       A          STX   PNTR     ALL SET FOR NEXT
00084  A b8b6 86   fc       A          LDAA  #$FC     ENABLE EPROM POWER (VPP)
00085  A b8b8 97   14       A          STAA  EPMCNT   PPC=0,PLC=0
00086                         *
00087                         * NOW WAIT 50 MSEC TIMEOUT USING COMPARE
00088                         *
00089  A b8ba dc   86       A          LDD   WAIT     GET CYCLE COUNTER
00090  A b8bc d3   09       A          ADDD  TIMER    BUMP CURRENT VALUE
00091  A b8be 7f   0008     A          CLR   TCSR     CLEAR OCF
00092  A b8c1 dd   0b       A          STD   OUTCMP   SET OUTPUT COMPARE
00093  A b8c3 86   40       A          LDAA  #$40     NOW WAIT FOR OCF
00094  A b8c5 95   08       A EPRO04   BITA  TCSR     
00095  A b8c7 27   fc    b8c5          BEQ   EPRO04   NOT YET
00096                         *
00097  A b8c9 38                       PULX           SET UP FOR NEXT ONE
00098  A b8ca 08                       INX            NEXT
00099  A b8cb 9c   82       A          CPX   IMEND    MAYBE DONE
00100  A b8cd 23   d9    b8a8          BLS   EPRO02   NOT YET
00101  A b8cf 86   ff       A          LDAA  #$FF     REMOVE VPP, INHIBIT LATCH
00102  A b8d1 97   14       A          STAA  EPMCNT   EPROM CAN NOW RE READ
00103  A b8d3 38                       PULX           RESTORE PNTR
00104  A b8d4 df   84       A          STX   PNTR     

M6801 Portable Cross Assembler  0.05  BYTEBUG.asm  Page 4
 Sat May 18 20:37:13 2019 
Options - MD,MC,NOG,NOU,W,NOMEX,CL,FMT,O
 
LINE   S PC   OPCO OPERANDS S LABEL    MNEMO OPERANDS COMMENT
00105                         * *
00106                         * START NEW CODE
00107                         *
00108  A b8d6 ce   7000     A          LDX   #$7000   SET UP POINTER
00109  A b8d9 3c              VERF2    PSHX           SAVE POINTER ON STACK
00110  A b8da a6   00       A          LDAA  0,X      GET DESIRED DATA
00111  A b8dc de   84       A          LDX   PNTR     GET EPROM ADDR.
00112  A b8de e6   00       A          LDAB  0,X      GET DATA TO BE CHECKED
00113  A b8e0 11                       CBA            CHECK IF SAME
00114  A b8e1 26   10    b8f3          BNE   ERROR2   BRANCH IF ERROR(LIGHT LED)
00115  A b8e3 08                       INX            NEXT ADDR
00116  A b8e4 df   84       A          STX   PNTR     ALL SET FOR NEXT
00117  A b8e6 38                       PULX           SETUP FOR NEXT ONE
00118  A b8e7 08                       INX            NEXT
00119  A b8e8 8c   8000     A          CPX   #$8000   MAYBE DONE
00120  A b8eb 26   ec    b8d9          BNE   VERF2    NOT YET
00121                         **
00122  A b8ed 86   84       A          LDAA  #$84     
00123  A b8ef 97   02       A          STAA  P1DR     LIGHT VERIFY LED
00124                         **
00125  A b8f1 20   fe    b8f1 SELF     BRA   SELF     WAIT FOREVER
00126                         **
00127  A b8f3 86   82       A ERROR2   LDAA  #$82     LIGHT ERROR & ERASED LED'S
00128  A b8f5 97   02       A          STAA  P1DR     
00129  A b8f7 20   f8    b8f1          BRA   SELF     
00130                         **
00131                         * R E S T A R T   A N D   I N T R. V E C.
00132                         *
00133  A bff0                          ORG   $BFF0   
00134  A bff0      b8f1     A          FDB   SELF     
00135  A bff2      b8f1     A          FDB   SELF     
00136  A bff4      b8f1     A          FDB   SELF     
00137  A bff6      b8f1     A          FDB   SELF     
00138  A bff8      b8f1     A          FDB   SELF     
00139  A bffa      b8f1     A          FDB   SELF     
00140  A bffc      b8f1     A          FDB   SELF     
00141  A bffe      b850     A          FDB   START   
00142                                  END           



Total number of errors: 0
Total number of warnings: 0
Total number of lines: 142
 
 
Number of bytes in section ASCT: 193

Number of bytes in program: 193

M6801 Portable Cross Assembler  0.05     Page 5
 Sat May 18 20:37:13 2019 
 
           CROSS REFERENCE TABLE
NAME    ATTRB S VALUE P:LINE LINE1....N
 
EPMCNT   EQU  A 0014  2:13          78   85  102
EPRO02        A b8a8  3:76         100
EPRO04        A b8c5  3:94          95
EPROM         A b8a3  3:72       
ERASE         A b860  2:32          38
ERROR1        A b88e  3:59          34
ERROR2        A b8f3  4:127        114
IMBEG         A 0080  2:18          64   74
IMEND         A 0082  2:19          66   99
NEXT          A b86d  2:40          36
OUTCMP   EQU  A 000b  2:12          51   92
P1DDR    EQU  A 0000  2:8           26
P1DR     EQU  A 0002  2:9           27   41   60  123  128
PGINT         A b894  3:63          57
PNTR          A 0084  2:20          30   72   80   83  104  111  116
SELF          A b8f1  4:125         61  125  129  134  135  136  137  138  139  140
STALL1        A b876  2:47          56
STALL2        A b883  3:53          54
START         A b850  2:24         141
TCSR     EQU  A 0008  2:10          50   53   91   94
TIMER    EQU  A 0009  2:11          49   90
VERF2         A b8d9  4:109        120
WAIT          A 0086  2:21          45   68   89
« Last Edit: May 19, 2019, 12:52:05 am by joeqsmith »
 
The following users thanked this post: bytestorm


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf